上次我们将了Ocelot的网的实现,可以通过访问网关将请求转发到后台的webapi程序里。Ocelot还支持负载均衡的实现,只需配置文件进行修改。
继续上次的项目,我们建立了两个示例的webpai项目,Service1和Service2里面的实现都是一样的,都简单的建立了一个webpai的功能。
Service1运行7001端口,Service2运行7002端口
修改我们的Gateway项目中的网关配置文件ocelot.json
{
"ReRoutes": [
{
//Upstream表示上游请求,即客户端请求到API Gateway的请求
"UpstreamPathTemplate": "/Service1/{url}", //请求路径模板
"UpstreamHttpMethod": [ "Get", "Post" ], //请求方法数组
"UseServiceDiscovery": false, //启用服务发现
//Downstream表示下游请求,即API Gateway转发的目标服务地址
"DownstreamPathTemplate": "/api/{url}", //下游请求地址模板
"DownstreamScheme": "http", //请求协议,目前应该是支持http和https
//A***************指定单个转发地址
//"DownstreamHostAndPorts": [ //请求服务地址
// {
// "Host": "localhost",
// "Port": 7001
// }
//],
B***************指定多个转发地址 用于负载均衡
"DownstreamHostAndPorts": [
{
"Host": "localhost", //下游地址
"Port": 7001 //下游端口号
},
{
"Host": "localhost",
"Port": 7002
}
],
///**配置负载
//LeastConnection: 最少连接,跟踪哪些服务正在处理请求,并把新请求发送到现有请求最少的服务上。该算法状态不在整个Ocelot集群中分布。
//RoundRobin: 轮询可用的服务并发送请求。 该算法状态不在整个Ocelot集群中分布。
//NoLoadBalancer: 不负载均衡,从配置或服务发现提供程序中取第一个可用的下游服务。
//最新版本Ocelot配置轮询方式如下:
//**/
"LoadBalancerOptions": {
"Type": "RoundRobin"
},
老版本Ocelot配置轮询方式如下:
"LoadBalancer": "RoundRobin"
}
],
"GlobalConfiguration": {
//"ServiceDiscoveryProvider": {
// "Host": "127.0.0.1",
// "Port": 8500,
// "Type": "PollConsul"
//}
}
}
然后将三个项目都启动,我们访问http://localhost:7000/Service1/Values/GetById?id=123
就会再Service1和Service2两个程序的webapi中进行轮询,因为我们配置负载为RoundRobin轮询模式。