Polly是一种开源的.NET弹性和瞬态故障处理库,允许我们以非常顺畅和线程安全的方式来执诸如行重试,断路,超时,故障恢复等策略。
Polly主要功能
重试(Retry)
断路器(Circuit-breaker)
超时检测(Timeout)
缓存(Cache)
降级(FallBack)
1.在Nugget中引入对应的Polly

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——触发限流以后多久可以重试。
白名单
白名单里的客户端是不会受到限流限制的。按照配置添加请求头,就可以被白名单识别:
请求时添加这个请求头,无论怎么刷都不会被限流。
超时、熔断、限流的必要性和好处是不言而喻的,但是上生产一定要注意配置的合理性,充分综合业务场景和需要才是王道,毕竟技术如果不解决问题那就毫无意义
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!