Polly 是 .NET 中主流弹性容错库,支持直观配置重试、熔断及组合策略。通过 Policy.WrapAsync 组合重试与熔断,配合指数退避、jitter、日志回调和 PolicyRegistry 等特性实现高可用。

Polly 是 .NET 生态中最主流的弹性与容错库,用它实现重试(Retry)和熔断(Circuit Breaker)非常直观,不需要自己写状态管理或指数退避逻辑。核心是把“可能失败的操作”包装进策略(Policy),再用 Execute 或 ExecuteAsync 调用即可。
快速上手:安装与基础重试
先通过 NuGet 安装:
PM> Install-Package Polly
最简单的重试策略:失败时最多重试 3 次,每次立即重试:
var retryPolicy = Policy
.Handle<HttpRequestException>() // 捕获指定异常
.RetryAsync(3); // 重试 3 次(共执行 4 次)
await retryPolicy.ExecuteAsync(async () =>
{
using var client = new HttpClient();
return await client.GetStringAsync("https://api.example.com/data");
});
登录后复制
带退避策略的重试(推荐生产使用)
连续重试容易压垮下游,应加入延迟。Polly 支持线性、指数等退避方式:
- 指数退避(Exponential Backoff):延迟随重试次数翻倍增长,最常用
- 自定义退避函数:可加入 jitter(随机抖动)防雪崩
示例(带 jitter 的指数退避):
var jitteredBackoff = Policy
.Handle<HttpRequestException>()
.WaitAndRetryAsync(
retryCount: 3,
sleepDurationProvider: retryAttempt =>
TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))
+ TimeSpan.FromMilliseconds(new Random().Next(0, 100))
);
登录后复制
熔断器:自动暂停请求,保护系统
当错误率过高时,熔断器会进入 Open 状态,直接拒绝请求,避免雪崩。一段时间后进入 Half-Open 尝试恢复。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~