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

Polly 是 .NET 中一个广泛使用的弹性与瞬态故障处理库,它可以帮助开发者为应用添加重试、熔断、超时、降级、缓存等策略,从而提升系统的容错能力和稳定性。当调用外部服务(如 HTTP API、数据库)可能出现网络抖动或短暂故障时,Polly 能让程序更“聪明”地应对这些异常情况。
在项目中使用 Polly,首先通过 NuGet 安装对应包:
Install-Package Polly
如果你主要处理 HTTP 请求,还可以安装集成 HttpClient 的扩展包:
Install-Package Polly.Extensions.Http
当操作失败时自动重试,适用于临时性错误,比如网络超时、服务暂时不可用。
示例:最多重试3次,每次间隔递增(指数退避):
var retryPolicy = Policy
.Handle<HttpRequestException>()
.WaitAndRetryAsync(3, i => TimeSpan.FromSeconds(Math.Pow(2, i)));
当失败次数达到阈值时,自动“熔断”,停止发起请求一段时间,避免雪崩效应。之后尝试恢复(半开状态),判断服务是否恢复正常。
示例:连续5次失败后熔断,持续30秒:
var circuitBreakerPolicy = Policy
.Handle<HttpRequestException>()
.CircuitBreakerAsync(
handledEventsAllowedBeforeBreaking: 5,
durationOfBreak: TimeSpan.FromSeconds(30)
);
限制操作执行时间,防止长时间阻塞。
示例:为请求设置10秒超时:
var timeoutPolicy = Policy
.TimeoutAsync(TimeSpan.FromSeconds(10));
Polly 支持将多个策略组合使用,例如先重试,再熔断,最外层加超时。
示例:按顺序组合策略:
var policyWrap = Policy.WrapAsync(timeoutPolicy, retryPolicy, circuitBreakerPolicy);
使用组合策略执行代码:
await policyWrap.ExecuteAsync(async () =>
{
var response = await httpClient.GetAsync("https://api.example.com/data");
response.EnsureSuccessStatusCode();
});
在 ASP.NET Core 中,建议结合 IHttpClientFactory 和 Polly 使用,更加简洁且线程安全。
在 Program.cs 或 Startup.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是什么?如何为应用添加熔断、重试等弹性策略?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号