.Net Core微服务入门全纪录(五)——Ocelot-API网关(下) (2)

在Routes路由配置中增加了RateLimitOptions。ClientWhitelist代表客户端白名单,在白名单中的客户端可以不受限流的影响;EnableRateLimiting代表是否限流;Period代表限流的单位时间,例如1s,5m,1h,1d等;PeriodTimespan代表客户端达到请求上限多少秒后可以重试;Limit代表客户端在定义的时间内可以发出的最大请求数。
在GlobalConfiguration配置中也增加了RateLimitOptions。DisableRateLimitHeaders代表是否禁用X-Rate-Limit和Retry-After标头(请求达到上限时response header中的限制数和多少秒后能重试);QuotaExceededMessage:代表请求达到上限时返回给客户端的消息;HttpStatusCode:代表请求达到上限时返回给客户端的HTTP状态代码。ClientIdHeader可以允许自定义用于标识客户端的标头。默认情况下为“ ClientId”。
最重要的就是Period,PeriodTimespan,Limit这几个配置。

重新编译启动看一下效果:

.Net Core微服务入门全纪录(五)——Ocelot-API网关(下)

超时/熔断

超时很好理解,就是网关请求服务时可容忍的最长响应时间。熔断的意思就是当请求某个服务的异常次数达到一定量时,那么网关在一定时间内就不再对这个服务发起请求了,直接熔断。
Ocelot中启用 超时/熔断 需要NuGet安装一下Ocelot.Provider.Polly:

.Net Core微服务入门全纪录(五)——Ocelot-API网关(下)

修改Startup.cs中的ConfigureServices()方法:

//添加ocelot服务 services.AddOcelot() //添加consul支持 .AddConsul() //添加缓存 .AddCacheManager(x => { x.WithDictionaryHandle(); }) //添加Polly .AddPolly();

同样的在ocelot.json路由配置中增加QoSOptions:

"QoSOptions": { "ExceptionsAllowedBeforeBreaking": 3, "DurationOfBreak": 10000, "TimeoutValue": 5000 }

ExceptionsAllowedBeforeBreaking代表发生错误的次数,DurationOfBreak代表熔断时间,TimeoutValue代表超时时间。
以上的配置意思就是当服务发生3次错误时,那么就熔断10秒,期间客户端的请求直接返回错误,10秒之后恢复。
这个不太好模拟,就不演示了,应该也挺好理解的。

。。。。。。

关于服务治理的学问还有很多,不继续了。。。就到此为止吧。
想要更深入了解Ocelot的,请看官网:https://ocelot.readthedocs.io/en/latest/
或者看源码:https://github.com/ThreeMammals/Ocelot

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwddxx.html