Ocelot-入门
官网:https://ocelot.readthedocs.io/en/latest/
使用步骤
1、安装Nuget:Ocelot
2、注册服务
services.AddOcelot();
3、注册中间件
app.UseOcelot().Wait();
4、添加配置文件ocelot.json
//*****************************单地址单实例********************************
{
"Routes": [
{
"DownstreamPathTemplate": "/{url}", //服务地址--url变量
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "127.0.0.1",
"Port": 5001 //服务端口
}
],
"UpstreamPathTemplate": "/order/{url}", //网关地址--url变量
"UpstreamHttpMethod": [ "Get", "Post" ]
}
]
}
5、添加数据源
builder.Configuration.AddJsonFile("ocelot.json", false, true);
单地址多实例负载均衡
只需要修改配置文件
//*****************************单地址多实例负载均衡********************************
{
"Routes": [
{
"DownstreamPathTemplate": "/{url}", //服务地址--url变量
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "127.0.0.1",
"Port": 5001
},
{
"Host": "127.0.0.1",
"Port": 5002
},
{
"Host": "127.0.0.1",
"Port": 5003
}
],
"LoadBalancerOptions": {
"Type": "RoundRobin" //轮询 //"LeastConnection" //最少连接数的服务器 "NoLoadBalance" //不负载均衡 //"CookieStickySessions" //会话粘滞 //
},
"UpstreamPathTemplate": "/order/{url}", //网关地址--url变量
"UpstreamHttpMethod": [ "Get", "Post" ]
}
]
}
缓存
1、安装Nuget:Ocelot.Cache.CacheManager
2、注册缓存服务
using Ocelot.Cache.CacheManager;
builder.Services.AddOcelot().AddCacheManager(x => {
x.WithDictionaryHandle();//默认存储字典
});
3、配置
{
"Routes": [
{
"DownstreamPathTemplate": "/{url}", //服务地址--url变量
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "127.0.0.1",
"Port": 5001
}
],
"FileCacheOptions": {
"TtlSeconds": 15, //Second
"Region": "UserCache" //可以调用Api缓存清理
},
"UpstreamPathTemplate": "/order/{url}", //网关地址--url变量
"UpstreamHttpMethod": [ "Get", "Post" ]
}
]
}
Polly限流
1、安装Nuget:Ocelot.Provider.Consul
2、注册服务
using Ocelot.Provider.Polly;
builder.Services.AddOcelot().AddPolly();
3、配置
{
"Routes": [
{
"DownstreamPathTemplate": "/{url}", //服务地址--url变量
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "127.0.0.1",
"Port": 5001
}
],
"RateLimitOptions": {
"ClientWhitelist": [ "fan", "li" ], //白名单 ClientId 区分大小写,http请求头ClientId有fan或li,不限制
"EnableRateLimiting": true,
"Period": "15s", //1s, 5m, 1h, 1d
"PeriodTimespan": 5, //多少秒之后客户端可以重试
"Limit": 5 //统计时间段内允许的最大请求数量---张队贡献的代码
},
"UpstreamPathTemplate": "/order/{url}", //网关地址--url变量
"UpstreamHttpMethod": [ "Get", "Post" ]
}
]
}
Consul
1、安装Nughet:Ocelot.Provider.Consul
2、注册服务
builder.Services.AddOcelot().AddConsul();
3、配置
{
"Routes": [
{
"UpstreamPathTemplate": "/order/{url}", //网关地址--url变量
"UpstreamHttpMethod": [ "Get", "Post" ],
"UseServiceDiscovery": true,
"ServiceName": "OrderService", //consul服务名称
"DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
"DownstreamScheme": "http",
"LoadBalancerOptions": {
"Type": "RoundRobin" //轮询 LeastConnection-最少连接数的服务器 NoLoadBalance不负载均衡
}
}
],
"GlobalConfiguration": {
"ServiceDiscoveryProvider": {
"Host": "localhost",
"Port": 8500,
"Type": "Consul" //由Consul提供服务发现, 每次请求去consul
}
}
}
测试有问题
其他配置(未验证)
//////MVC的路由规则是近水楼台先得月--
////*****************************路由冲突+带权匹配********************************
//{
// "Routes": [
// {
// "DownstreamPathTemplate": "/{url}", //服务地址--url变量
// "DownstreamScheme": "http",
// "DownstreamHostAndPorts": [
// {
// "Host": "localhost",
// "Port": 5726 //服务端口
// }
// ],
// "UpstreamPathTemplate": "/{url}", //网关地址--url变量 //冲突的还可以加权重Priority
// "UpstreamHttpMethod": [ "Get", "Post" ],
// "Priority": 0 //默认是0 加个1
// },
// {
// "DownstreamPathTemplate": "/api/users/get?id={id}", //服务地址--url变量
// "DownstreamScheme": "http",
// "DownstreamHostAndPorts": [
// {
// "Host": "localhost",
// "Port": 5727 //服务端口
// }
// ],
// "UpstreamPathTemplate": "/api/users/get/{id}", //网关地址--url变量 //冲突的还可以加权重Priority
// "UpstreamHttpMethod": [ "Get", "Post" ],
// "Priority": 1 //默认是0 加个1
// },
// {
// "DownstreamPathTemplate": "/api/users/{url}?id={id}", //服务地址--url变量
// "DownstreamScheme": "http",
// "DownstreamHostAndPorts": [
// {
// "Host": "localhost",
// "Port": 5728 //服务端口
// }
// ],
// "UpstreamPathTemplate": "/api/users/{url}/{id}", //网关地址--url变量 //冲突的还可以加权重Priority
// "UpstreamHttpMethod": [ "Get", "Post" ],
// "Priority": 2 //默认是0 加个1
// }
// ]
//}
////*****************************单地址多实例负载均衡+Consul********************************
//{
// "Routes": [
// {
// "UpstreamPathTemplate": "/T/{url}", //网关地址--url变量
// "UpstreamHttpMethod": [ "Get", "Post" ],
// "DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
// "DownstreamScheme": "http",
// "UseServiceDiscovery": true,
// "ServiceName": "ZhaoxiService", //consul服务名称
// "LoadBalancerOptions": {
// "Type": "RoundRobin" //轮询 LeastConnection-最少连接数的服务器 NoLoadBalance不负载均衡
// }
// }
// ],
// "GlobalConfiguration": {
// //"BaseUrl": "http://127.0.0.1:6299", //网关对外地址
// "ServiceDiscoveryProvider": {
// "Host": "127.0.0.1",
// "Port": 8500,
// "Type": "Consul" //由Consul提供服务发现, 每次请求去consul
// }
// //,"ServiceDiscoveryProvider": {
// // "Host": "localhost",
// // "Port": 8500,
// // "Type": "PollConsul", //由Consul提供服务发现,
// // "PollingInterval": 1000 //轮询consul,频率毫秒--down掉是不知道的
// // //"Token": "footoken"//需要ACL的话
// //}
// }
//}
////*****************************单地址+Ids4********************************
//{
// "Routes": [
// {
// "DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
// "DownstreamScheme": "http",
// "DownstreamHostAndPorts": [
// {
// "Host": "127.0.0.1",
// "Port": 5726 //服务端口
// }
// ],
// "UpstreamPathTemplate": "/T5726/{url}", //网关地址--url变量
// "UpstreamHttpMethod": [ "Get", "Post" ],
// "AuthenticationOptions": {
// "AuthenticationProviderKey": "UserGatewayKey",
// "AllowedScopes": []
// },
// }
// ]
//}
//*****************************超时+限流+熔断+降级+Consul+Polly********************************
//{
// "Routes": [
// {
// "DownstreamPathTemplate": "/api/{url}", //服务地址--url变量
// "DownstreamScheme": "http",
// "UpstreamPathTemplate": "/T/{url}", //网关地址--url变量
// "UpstreamHttpMethod": [ "Get", "Post" ],
// "UseServiceDiscovery": true,
// "ServiceName": "ZhaoxiService", //consul服务名称
// "LoadBalancerOptions": {
// "Type": "RoundRobin" //轮询 LeastConnection-最少连接数的服务器 NoLoadBalance不负载均衡
// },
// "RateLimitOptions": {
// "ClientWhitelist": [ "eleven", "seven" ], //白名单 ClientId 区分大小写
// "EnableRateLimiting": true,
// "Period": "5m", //1s, 5m, 1h, 1d
// "PeriodTimespan": 30, //多少秒之后客户端可以重试
// "Limit": 5 //统计时间段内允许的最大请求数量---张队贡献的代码
// }
// //"AuthenticationOptions": {
// // "AuthenticationProviderKey": "UserGatewayKey",
// // "AllowedScopes": []
// //},
// //"QoSOptions": {
// // "ExceptionsAllowedBeforeBreaking": 3, //允许多少个异常请求
// // "DurationOfBreak": 10000, // 熔断的时间,单位为ms
// // "TimeoutValue": 2000 //单位ms 如果下游请求的处理时间超过多少则自如将请求设置为超时 默认90秒
// //}
// //"FileCacheOptions": {
// // "TtlSeconds": 15,
// // "Region": "UserCache" //可以调用Api清理
// //}
// }
// ],
// "GlobalConfiguration": {
// "BaseUrl": "http://127.0.0.1:6299", //网关对外地址
// "ServiceDiscoveryProvider": {
// "Host": "127.0.0.1",
// "Port": 8500,
// "Type": "Consul" //由Consul提供服务发现
// },
// "RateLimitOptions": {
// "QuotaExceededMessage": "Too many requests, maybe later? 11", // 当请求过载被截断时返回的消息
// "HttpStatusCode": 666 // 当请求过载被截断时返回的http status
// //"ClientIdHeader": "client_id" // 用来识别客户端的请求头,默认是 ClientId
// }
// }
//}
////*****************************请求聚合Aggregator********************************
//{
// "Routes": [
// {
// "DownstreamPathTemplate": "/api/users/all",
// "DownstreamScheme": "http",
// "DownstreamHostAndPorts": [
// {
// "Host": "localhost",
// "Port": 5726 //服务端口
// } //可以多个,自行负载均衡
// ],
// "UpstreamPathTemplate": "/T5726/users/all",
// "UpstreamHttpMethod": [ "Get", "Post" ],
// "key": "T5726"
// },
// {
// "DownstreamPathTemplate": "/api/users/all",
// "DownstreamScheme": "http",
// "DownstreamHostAndPorts": [
// {
// "Host": "localhost",
// "Port": 5727 //服务端口
// }
// ],
// "UpstreamPathTemplate": "/T5727/users/all",
// "UpstreamHttpMethod": [ "Get", "Post" ],
// "key": "T5727"
// },
// {
// "DownstreamPathTemplate": "/api/users/all",
// "DownstreamScheme": "http",
// "DownstreamHostAndPorts": [
// {
// "Host": "localhost",
// "Port": 5728 //服务端口
// }
// ],
// "UpstreamPathTemplate": "/T5728/users/all",
// "UpstreamHttpMethod": [ "Get", "Post" ],
// "key": "T5728"
// }
// ],
// "Aggregates": [
// {
// "RouteKeys": [
// "T5726",
// "T5727",
// "T5728"
// ],
// "UpstreamPathTemplate": "/UserAggregator", //如果某个404 是不影响返回,当成null
// "Aggregator": "CustomUserAggregator" //自定义聚合器
// }
// ]
//}