如何使用 Polly 在 .NET 中实现弹性策略?

来源:这里教程网 时间:2026-02-21 17:27:39 作者:

在 .NET 中使用 Polly 可以有效提升应用程序的容错能力,特别是在处理网络请求、数据库调用或第三方服务交互时。Polly 是一个强大的弹性与瞬态故障处理库,支持重试、熔断、超时、降级等多种策略。

安装 Polly 包

要在项目中使用 Polly,先通过 NuGet 安装相关包:

Polly:核心库 Polly.Extensions.Http:结合 HttpClient 使用更方便(推荐)

在项目目录下运行以下命令:

Install-Package Polly Install-Package Polly.Extensions.Http

定义常见的弹性策略

Polly 允许你组合多种策略来应对不同的异常场景。以下是几种常用策略的实现方式。

1. 重试策略(Retry)
当请求因临时故障失败时,自动重试。

var retryPolicy = Policy .Handle() .OrResult(r => !r.IsSuccessStatusCode) .WaitAndRetryAsync(3, i => TimeSpan.FromSeconds(i * 2));

2. 断路器策略(Circuit Breaker)
防止系统在持续失败时继续发送请求,给服务恢复时间。

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

3. 超时策略(Timeout)
限制操作执行时间,避免长时间挂起。

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

组合多个策略(PolicyWrap)

实际应用中通常需要将多个策略组合使用。Polly 提供了 PolicyWrap 来实现策略叠加。

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

执行 HTTP 请求时应用组合策略:

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

与 IHttpClientFactory 集成(推荐方式)

在 ASP.NET Core 项目中,建议将 Polly 与 IHttpClientFactory 结合使用,实现更简洁的配置。

Program.csStartup.cs 中配置:

services.AddHttpClient("resilient-client") .AddPolicyHandler(retryPolicy) .AddPolicyHandler(timeoutPolicy) .AddPolicyHandler(circuitBreakerPolicy);

之后通过依赖注入使用 HttpClient,所有策略会自动生效。

基本上就这些。合理使用 Polly 能显著提升系统的稳定性,尤其是在不稳定的网络环境中。关键是根据业务需求选择合适的策略组合,并做好监控和日志记录。

相关推荐