polly包及用法

51 阅读1分钟

Polly 是一个 .NET 下非常流行的容错和弹性处理库。它主要用于帮助开发者优雅地处理各种异常和故障场景,比如:

  • 重试(Retry):自动重试失败的操作,支持自定义重试次数和间隔。
  • 断路器(Circuit Breaker):在连续失败后暂时“断开”服务,防止雪崩效应。
  • 超时(Timeout):为操作设置超时时间,避免长时间等待。
  • 回退(Fallback):操作失败时自动执行备用方案。
  • 缓存(Cache):为操作结果提供缓存机制。
  • 隔离(Bulkhead):限制并发量,防止资源耗尽。

Polly 通过简单的 API,让你可以灵活组合这些策略,提高应用的稳定性和健壮性。常用于调用外部服务、数据库、API 等容易出现故障的场景。

更多信息可参考官方文档:Polly 官网

using Polly;
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        // 定义一个重试策略,最多重试3次,每次间隔2秒
        var retryPolicy = Policy
            .Handle<HttpRequestException>()
            .WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(2),
                (exception, timeSpan, retryCount, context) =>
                {
                    Console.WriteLine($"重试 {retryCount} 次,等待 {timeSpan.TotalSeconds} 秒,异常:{exception.Message}");
                });

        using var httpClient = new HttpClient();

        // 使用策略执行 HTTP 请求
        await retryPolicy.ExecuteAsync(async () =>
        {
            var response = await httpClient.GetAsync("https://example.com/api/data");
            response.EnsureSuccessStatusCode();
            Console.WriteLine("请求成功!");
        });
    }
}