Polly是一种开源的.NET弹性和瞬态故障处理库,允许我们以非常顺畅和线程安全的方式来执诸如行重试,断路,超时,故障恢复等策略。
Polly主要功能
重试(Retry)
断路器(Circuit-breaker)
超时检测(Timeout)
缓存(Cache)
降级(FallBack)
 
1.在Nugget中引入对应的Polly
0
2.在Startup文件中追加Polly(可以看我的上一篇文章)
public void ConfigureServices(IServiceCollection services)
{
services.AddOcelot().AddPolly();
}
3.在ocelot.json里边添加缓存时间
{
      "DownstreamPathTemplate": "/api/xxx/entity",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "域名/ip",
          "Port": 80
        }
      ],
      "UpstreamPathTemplate": "/test/xxx/entity",
      "UpstreamHttpMethod": [ "Get" ],
      "FileCacheOptions": {
        "TtlSeconds": 15 //缓存时间(秒)
      },
       "QoSOptions": {
        "ExceptionsAllowedBeforeBreaking": 3,
        "DurationOfBreak": 10000,
        "TimeoutValue": 1000
      },
      "RateLimitOptions": {
        "ClientWhitelist": [],
        "EnableRateLimiting": true,
        "Period": "1s",
        "PeriodTimespan": 1,
        "Limit": 1
       }
    }
QoSOptions
ExceptionsAllowedBeforeBreaking:阈值,当转发到下游的服务连续出现的异常次数达到阈值就会触发熔断。必须和DurationOfBreak一起设置。
DurationOfBreak:熔断持续时间,单位毫秒。必须和ExceptionsAllowedBeforeBreaking一起设置。
TimeoutValue:限定时间内未响应的请求直接超时,单位毫秒。可以单独设置
tips:ocelot默认超时时间是90秒,90秒啊
RateLimitOptions
ClientWhitelist:客户端白名单,白名单不受限流规则限制。
EnableRateLimiting:是否启用限流。
Period:周期,单位有s(秒)、m(分)、h(时)、d(天),比如1h
PeriodTimespan:多少秒后重试。
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——触发限流以后多久可以重试。
 
白名单
白名单里的客户端是不会受到限流限制的。按照配置添加请求头,就可以被白名单识别:
请求时添加这个请求头,无论怎么刷都不会被限流。
超时、熔断、限流的必要性和好处是不言而喻的,但是上生产一定要注意配置的合理性,充分综合业务场景和需要才是王道,毕竟技术如果不解决问题那就毫无意义
posted on 2022-07-20 18:34  CRUDEngineer  阅读(276)  评论(0编辑  收藏  举报