三、Ocelot请求聚合与负载均衡
上一篇文章介绍了在.Net Core中如何使用Ocelot:https://www.cnblogs.com/yangleiyu/p/16847439.html
本文介绍在ocelot的请求聚合与负载均衡配置。
一、请求聚合
1、概念
Ocelot可以定义多组路由,然后根据优先级对上游服务发出的请求进行不同的转发处理,每个路由转发都匹配唯一的一个下游服务API接口。但是有时候,上游服务想要获得来自两个API接口返回的结果。Ocelot允许我们在配置文件中声明聚合路由Aggregates,从而实现这样的效果
2、路由配置

可以看到这里多加了一个Key属性。Aggregates跟Routes是同级的,而且也是一个数组,这代表着我们可以声明多个聚合路由,而在我们声明的这一组聚合路由中的属性RouteKeys,它包含的元素就是我们真正需要响应的路由的Key属性值。
3、结果



4、注意事项
仅支持GET方式
下游服务返回类型要求为application/json
返回内容类型为application/json,不会返回404请求
此处必须返回Json,下游接口返回类型必须为IActionResult,如果返回String,那么聚合返回的下游json就会是乱码(别问我怎么知道的,又踩坑了)
二、高级请求聚合
自定义请求聚合,此处暂不过多说明,后续介绍
三、负载均衡
我们全部的路由配置中都是一组路由配置一个下游服务地址,也就说明当上游服务请求一个Url,Ocelot就必定转发给某一个固定的下游服务,这样其实是不安全的,因为有可能某一个下游服务阻塞,甚至挂掉了,那就可能导致整个服务瘫痪了,这肯定是不行的。Ocelot能够通过可用的下游服务对每个路由进行负载平衡。我们来看看具体的路由配置

LeadConnection负载均衡器算法共有4种:
LeastConnection 把新请求发送到现有请求最少的服务上
RoundRobin 轮询可用的服务并发送请求
NoLoadBalancer 不负载均衡,总是发往第一个可用的下游服务
CookieStickySessions 使用cookie关联所有相关的请求到制定的服务
注意:经测,官网上面说的时轮询可用的服务,但是测试发现并不是,不可用的会报错
四、配置
{
"GlobalConfiguration": {
"BaseUrl": "http://192.168.50.118:8003/" //网关暴露的的地址。
},
"Routes": [
{
"UpstreamPathTemplate": "/QiantoonService/Oam", //上游Api请求路由规则
"DownstreamPathTemplate": "/QiantoonService/Oam/Oam", //网关转发到下游路由规则
"UpstreamHttpMethod": [ "Get" ], //上下游支持请求方法
"DownstreamScheme": "http", //下游服务配置
"DownstreamHostAndPorts": [
{
"Host": "192.168.50.118", //下游地址
"Port": 8001 //下游端口号
}
],
"Key": "Oam"
},
{
"UpstreamPathTemplate": "/QiantoonService/SelfReg", //上游Api请求路由规则
"DownstreamPathTemplate": "/QiantoonService/SelfReg/SelfReg", //网关转发到下游路由规则
"UpstreamHttpMethod": [ "Get" ], //上下游支持请求方法
"DownstreamScheme": "http", //下游服务配置
"DownstreamHostAndPorts": [
{
"Host": "192.168.50.118", //下游地址
"Port": 8002 //下游端口号
},
{
"Host": "192.168.50.118", //下游地址
"Port": 8004 //下游端口号
}
],
"Key": "Reg",
"LoadBalancerOptions": { "Type": "RoundRobin" }
}
],
"Aggregates": [
{
"RouteKeys": [
"Oam",
"Reg"
],
"UpstreamPathTemplate": "/QiantoonService"
}
]
}
三、Ocelot请求聚合与负载均衡的更多相关文章
- Ocelot(二)- 请求聚合与负载均衡
Ocelot(二)- 请求聚合与负载均衡 作者:markjiang7m2 原文地址:https://www.cnblogs.com/markjiang7m2/p/10865511.html 源码地址: ...
- 学习一下 SpringCloud (三)-- 服务调用、负载均衡 Ribbon、OpenFeign
(1) 相关博文地址: 学习一下 SpringCloud (一)-- 从单体架构到微服务架构.代码拆分(maven 聚合): https://www.cnblogs.com/l-y-h/p/14105 ...
- Linux服务之nginx服务篇三(反向代理、负载均衡)
一.Nginx实现反向代理 概念 反向代理:在收到客户端请求之后,会修目标IP地址和端口 正向代理:在收到客户端请求之后,会修源IP地址和端口 上游服务器:代理服务器后端的哪些真正给客户端提供服务的节 ...
- Asp.Net Core + Ocelot 网关搭建:负载均衡的配置
前言 上一篇中简单做了一个网关Demo.本篇中也记录一下负载均衡的配置实现. 演示 首先开三个服务,端口分别为 60001,60003,60005,然后分别启动三个服务.接下来在ApiGate ...
- (课堂笔记)第三章:F5 LTM 负载均衡理论
BIG-IP LTM负载均衡理论 ------F5 BIG-IP LTM负载均衡策略---------- 1.1 LTM VS工作模式F5 BIG-IP LTM的内部对于数据包的处理方式,即是VS的工 ...
- nginx学习(2):启动gzip、虚拟主机、请求转发、负载均衡
一.启用gzip gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; ...
- Ocelot中文文档-负载均衡
Ocelot能通过可用的下游服务对每个ReRoute进行负载平衡. 这意味着您可以扩展您的下游服务,并且Ocelot可以有效地使用它们. 可用的负载均衡器的类型是: LeastConnection - ...
- nginx-启动gzip、虚拟主机、请求转发、负载均衡
一.启用gzip 1 gzip on; 2 gzip_min_length 1k; 3 gzip_buffers 4 16k; 4 gzip_http_version ...
- 一起来学Spring Cloud | 第三章:服务消费者 (负载均衡Ribbon)
一.负载均衡的简介: 负载均衡是高可用架构的一个关键组件,主要用来提高性能和可用性,通过负载均衡将流量分发到多个服务器,多服务器能够消除单个服务器的故障,减轻单个服务器的访问压力. 1.服务端负载均衡 ...
随机推荐
- java学习第一天.day03
运行程序数据存储 ASCII Unicode(万国码) A在码表的顺序是65,a在码表的顺序是97,1代表49 变量 定义一个变量声明数据类型是开辟一个空间存储数据,java对数据的定义比较严格,比如 ...
- 关于python如何引用excel文件
关于python如何引用excel文件 import pandas as pd #引用pandas库,as:将pandas简写为pd Nowcoder = pd.read_excel("1. ...
- JS判断两个数组的元素是否完全相等
1.使用ES6 新增的扩展运算符和Set新数据类型判断两个数组是否包含有相同的元素 var arr1 = ['green' , 'yellow' ,'blue' ,'red']; var arr2 = ...
- Spark基础入门(01)—RDD
1,基本概念 RDD(Resilient Distributed Dataset) :弹性分布式数据集 它是Spark中最基本的数据抽象,是编写Spark程序的基础.简单的来讲,一个Spark程序可以 ...
- CF1528C Trees of Tranquillity(图论,数据结构)
题面 有两棵 n n n 个点的有根树 T 1 T_1 T1, T 2 T_2 T2,根是 1 1 1 ,共用编号 1 1 1~ n n n.求最大的点集 S S S 满足每个点在 T 1 T_1 ...
- 蕞短鹭(artskjid) (⭐通信题/模拟⭐)
文章目录 题面(过于冗长,主要是对通信题的一些解释) 题解 1.通信题什么意思 2.此题题解 CODE 实现 题面(过于冗长,主要是对通信题的一些解释) 题解 1.通信题什么意思 并不是两个程序同时跑 ...
- Util和Helper类
Util和Helper Util Util类,应该是一个无状态的类,只有静态方法. 比如在获取某些类的全局实例化对象的时候可以使用. public class ParamUtil { ... publ ...
- 使用man手册查看内核函数
1.为避免man的一些功能缺失,先装好manpages-dev sudo apt-get install manpages-dev 2.安装mandocs的依赖包xmlto sudo apt-get ...
- 服务端挂了,客户端的 TCP 连接还在吗?
作者:小林coding 计算机八股文网站:https://xiaolincoding.com 大家好,我是小林. 如果「服务端挂掉」指的是「服务端进程崩溃」,服务端的进程在发生崩溃的时候,内核会发送 ...
- 华南理工大学 Python第2章课后小测-1
1.(单选)"abc"的长度是3,"老师好"的长度是多少?(本题分数:4)A) 1B) 3C) 6D) 9您的答案:B 正确率:100%2.(单选)下面代码的 ...