.NET中的Polly是什么?如何为应用添加熔断、重试等弹性策略?

Polly是.NET中用于处理弹性与瞬态故障的库,支持重试、熔断、超时等策略。通过NuGet安装Polly及Polly.Extensions.Http后,可定义重试、熔断、超时策略,并组合使用PolicyWrap。推荐结合IHttpClientFactory在ASP.NET Core中集成,实现线程安全的弹性HTTP调用,适用于处理网络抖动或服务短暂不可用场景,提升系统稳定性。

.net中的polly是什么?如何为应用添加熔断、重试等弹性策略?

Polly 是 .NET 中一个广泛使用的弹性与瞬态故障处理库,它可以帮助开发者为应用添加重试、熔断、超时、降级、缓存等策略,从而提升系统的容错能力和稳定性。当调用外部服务(如 HTTP API、数据库)可能出现网络抖动或短暂故障时,Polly 能让程序更“聪明”地应对这些异常情况。

安装 Polly

在项目中使用 Polly,首先通过 NuGet 安装对应包:

Install-Package Polly

如果你主要处理 HTTP 请求,还可以安装集成 HttpClient 的扩展包:

Install-Package Polly.Extensions.Http

常见弹性策略及用法

1. 重试策略(Retry)

当操作失败时自动重试,适用于临时性错误,比如网络超时、服务暂时不可用。

示例:最多重试3次,每次间隔递增(指数退避):

var retryPolicy = Policy
  .Handle()
  .WaitAndRetryAsync(3, i => TimeSpan.FromSeconds(Math.Pow(2, i)));

2. 熔断器策略(Circuit Breaker)

当失败次数达到阈值时,自动“熔断”,停止发起请求一段时间,避免雪崩效应。之后尝试恢复(半开状态),判断服务是否恢复正常。

示例:连续5次失败后熔断,持续30秒:

var circuitBreakerPolicy = Policy
  .Handle()
  .CircuitBreakerAsync(
    handledEventsAllowedBeforeBreaking: 5,
    durationOfBreak: TimeSpan.FromSeconds(30)
  );

3. 超时策略(Timeout)

限制操作执行时间,防止长时间阻塞。

示例:为请求设置10秒超时:

var timeoutPolicy = Policy
  .TimeoutAsync(TimeSpan.FromSeconds(10));

4. 组合策略(PolicyWrap)

Polly 支持将多个策略组合使用,例如先重试,再熔断,最外层加超时。

示例:按顺序组合策略:

var policyWrap = Policy.WrapAsync(timeoutPolicy, retryPolicy, circuitBreakerPolicy);

使用组合策略执行代码:

await policyWrap.ExecuteAsync(async () =>
  {
    var response = await httpClient.GetAsync(“https://api.example.com/data”);
    response.EnsureSuccessStatusCode();
  });

5. 与 IHttpClientFactory 集成(推荐方式)

在 ASP.NET Core 中,建议结合 IHttpClientFactory 和 Polly 使用,更加简洁且线程安全。

Program.csStartup.cs 中配置:

builder.Services.AddHttpClient(“resilient-client”)
  .AddTransientHttpErrorPolicy(policyBuilder => policyBuilder
    .WaitAndRetryAsync(3, _ => TimeSpan.FromMilliseconds(600)))
  .AddTransientHttpErrorPolicy(policyBuilder => policyBuilder
    .CircuitBreakerAsync(5, TimeSpan.FromSeconds(30)));

然后通过 IHttpClientFactory 获取客户端并发送请求,所有策略会自动生效。

适用场景建议

重试策略适合处理偶发性错误,比如 5xx 响应、连接失败;熔断用于防止对已崩溃的服务持续调用;超时避免资源挂起;组合策略提供全方位保护。

注意不要盲目重试非幂等操作(如 POST 提交),否则可能造成数据重复。

基本上就这些。Polly 让你用声明式方式定义容错逻辑,代码更清晰,系统更健壮。

以上就是.NET中的Polly是什么?如何为应用添加熔断、重试等弹性策略?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1441835.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 18:29:13
下一篇 2025年12月17日 18:29:28

相关推荐

发表回复

登录后才能评论
关注微信