.Net Core微服务网关Ocelot超时、熔断、限流

2022-04-16 13:39:45

基本概念

超时、熔断、限流听单,白名单不受限流规则限制。EnableRateLimiting:是否启用限流。Period:周期,单位有s(秒)、m(分)、h(时)、d(天),比如1hPeriodTimespan:多少秒后重试。Limit:周期内允许多少个请求。

想要更精细的控制,还可以在Global部分添加这些:

"RateLimitOptions": {  "DisableRateLimitHeaders": false,  "QuotaExceededMessage": "Customize Tips!",  "HttpStatusCode": 999,  "ClientIdHeader" : "Test"}
DisableRateLimitHeaders:是否禁用X-Rate-Limit、Retry-After标头。QuotaExceededMessage:触发限流时返回的消息。HttpStatusCode:触发限流时返回的http状态码(一般会写429)。ClientIdHeader:用来识别客户端的标头。tips:DisableRateLimitHeaders中提到的X-Rate-Limit、Retry-After:X-Rate-Limit——标准时间内允许多少个请求,Retry-After——触发限流以后多久可以重试。

接下来修改我的配置:

"RateLimitOptions": {        "ClientWhitelist": [ "myclient" ],        "EnableRateLimiting": true,        "Period": "1s",        "PeriodTimespan": 10,        "Limit": 1      }

修改全局配置:

"RateLimitOptions": {      "DisableRateLimitHeaders": false,      "QuotaExceededMessage": "123123",      "HttpStatusCode": 429,      "ClientIdHeader": "Test"    }

按配置来看,我设置1秒内最多允许1个请求,超过就触发限流。之后的请求都会返回429和123123,持续10秒。来试试:

.NetCore微服务网关Ocelot超时、熔断、限流

等待10秒后再次请求,恢复正常:

.NetCore微服务网关Ocelot超时、熔断、限流

白名单

白名单里的客户端是不会受到限流限制的。按照配置添加请求头,就可以被白名单识别:

.NetCore微服务网关Ocelot超时、熔断、限流

请求时添加这个请求头,无论怎么刷都不会被限流。

超时、熔断、限流的必要性和好处是不言而喻的,但是上生产一定要注意配置的合理性,充分综合业务场景和需要才是王道,毕竟技术如果不解决问题那就毫无意义。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。