Ocelot作为网关,功能有很多:负载均衡,限流,熔断,缓存....
而作为使用者的我们,只需要在configuration.json中配置即可,配置文件在官网上都有,站在巨人的肩膀上是真滴舒服。
下面简单记录几个功能的使用
Step1:Nuget上下载Ocelot的包
Step2:添加configuration.json文件,配置在官网或者自己网上搜索
Step3:services.AddOcelot(); app.UseOcelot();
功能一:路由,设置后网关请求的.good/{goodId}会转向服务的/api/good/goodId
{ "DownstreamPathTemplate": "/api/good/{goodId}",//下游路由模板 "DownstreamScheme": "http",//下游路由请求的方式 "DownstreamHostAndPorts": [//下游路由的Host以及端口 { "Host": "localhost", "Port": 1001, } ], "UpstreamPathTemplate": "/good/{goodId}",//上游路由请求的模板 "UpstreamHttpMethod": [ "Put", "Delete" ]//上游路由请求的方式 }
功能二:+Polly 限流 熔断
services.AddOcelot().AddPolly();
限流
"RateLimitOptions": { "ClientWhitelist": [], //白名单 "EnableRateLimiting": true, //是否启用限流 "Period": "5m", //1s, 5m, 1h, 1d "PeriodTimespan": 20, //多少秒之后客户端可以重试 "Limit": 5, //在统计时间段内允许的最大请求数量 //在 GlobalConfiguration下我们还可以进行以下配置 "DisableRateLimitHeaders": false, //Http头 X-Rate-Limit 和 Retry-After 是否禁用 "QuotaExceededMessage": "Too many!!!", //当请求过载被截断时返回的消息 "HttpStatusCode": 666, //当请求过载被截断时返回的http status "ClientIdHeader": "Test" //用来识别客户端的请求头,默认是 ClientId }
熔断
"QoSOptions": { "ExceptionsAllowedBeforeBreaking": 0, //允许多少个异常请求 "DurationOfBreak": 0, // 熔断的时间,单位为秒 "TimeoutValue": 0 //如果下游请求的处理时间超过多少秒则自如将请求设置为超时 }
功能三:+Consul 负载均衡
services.AddOcelot().AddConsul();
"ReRoutes": [ { //万能模板:"/{url}" ;万能模板的优先级最低,只要有其它的路由模板,其它的路由模板则会优先生效 "UpstreamPathTemplate": "/T/{url}", //上游请求地址模板 "UpstreamHttpMethod": [ //上游请求方式 "Get", "Post" ], "DownstreamPathTemplate": "/{url}", //下游跳转地址模板;将用户的请求 /post/1 转发到 localhost/api/post/1 "DownstreamScheme": "http", "UseServiceDiscovery": true, "ServiceName": "shenqing", "LoadBalancerOptions": { "Type": "RoundRobin" } }]
"GlobalConfiguration": { "BaseUrl": "http://127.0.0.1:6299", "ServiceDiscoveryProvider": { "Host": "localhost", "Port": 8500, "Type": "Consul" } }