在現代 Web 開發中,構建彈性 API 對于確保可靠性和性能至關重要。本文將指導您使用 Microsoft.Extensions.Http.Resilience 庫在 .NET 8 Web API 中實現彈性。我們將介紹如何設置重試策略和超時,以使您的 API 更能抵御瞬時故障。
步驟 1.創建一個新的 .NET 8 Web API 項目
首先,如果您沒有現有項目,請使用 .NET CLI 創建一個或使用默認的 Web API 模板。
步驟 2.添加所需的 NuGet 包
接下來,通過 NuGet 安裝Microsoft.Extensions.Http.Resilience庫:
dotnet add package Microsoft.Extensions.Http.Resilience --version 8.0.0
步驟 3.在 Program.cs 中配置 Resilience
修改 Program.cs 文件以使用 Microsoft.Extensions.Http.Resilience 提供的彈性策略設置 HttpClient。在這里,我們將定義重試策略和超時。
// 添加Resilience Pipeline
builder.Services.AddResiliencePipeline("default", x =>
{// 添加重試策略x.AddRetry(new Polly.Retry.RetryStrategyOptions{// 設置重試條件,處理所有異常ShouldHandle = new PredicateBuilder().Handle<Exception>(),// 設置重試的延遲時間為2秒Delay = TimeSpan.FromSeconds(2),// 最大重試次數為2次MaxRetryAttempts = 2,// 使用指數退避策略BackoffType = DelayBackoffType.Exponential,// 啟用抖動,增加隨機性以減少碰撞UseJitter = true})// 添加超時策略,超時時間為30秒.AddTimeout(TimeSpan.FromSeconds(30));
});
步驟 4.在服務中使用彈性 HttpClient
接下來,我們將在您的服務中注入并使用已配置的 HttpClient。此示例展示了如何使用彈性 HttpClient 從外部 API 獲取數據。
public class WeatherService
{// HttpClient實例,用于發送HTTP請求private readonly HttpClient _httpClient;// 彈性管道提供程序private readonly ResiliencePipelineProvider<string> _resiliencePipelineProvider;// 構造函數,注入HttpClient和ResiliencePipelineProvider實例public WeatherService(HttpClient httpClient,ResiliencePipelineProvider<string> resiliencePipelineProvider){_httpClient = httpClient;_resiliencePipelineProvider = resiliencePipelineProvider;}// 異步方法,獲取天氣信息public async Task<string> GetWeatherAsync(){// 獲取默認的彈性管道var pipeline = _resiliencePipelineProvider.GetPipeline("default");// 使用彈性管道執行HTTP GET請求var response = await pipeline.ExecuteAsync(async ct => await _httpClient.GetAsync($"https://localhost:7187/weatherforecast", ct));// 返回響應內容的字符串表示return await response.Content.ReadAsStringAsync();}
}
步驟 5. 在 Program.cs 中添加端點
app.MapGet("/weatherService/weather", async (WeatherService weatherService) =>
{// 調用WeatherService的GetWeatherAsync方法,獲取天氣信息var result = await weatherService.GetWeatherAsync();// 返回結果return result;
})// 設置該端點的名稱為 "GetWeather".WithName("GetWeather")// 使該端點在OpenAPI文檔中可見.WithOpenApi();
步驟 6. 運行應用程序
最后,運行您的應用程序并導航到端點以查看彈性 HttpClient 的實際運行。
結論
通過執行這些步驟,您已使用 Microsoft.Extensions.Http.Resilience 庫將彈性集成到 .NET 8 Web API 項目中。重試策略、斷路器設置和超時將有助于確保您的 API 能夠抵御瞬時故障,從而提高其可靠性和用戶體驗。