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("请求成功!");
});
}
}