實作應用程式彈性
.NET 的復原功能建置在 Polly 專案上,並透過 Microsoft.Extensions
提供。 您可以將單行程式代碼新增至您的應用程式,以新增使用合理預設值的標準復原策略。
將復原功能新增至您的應用程式
若要將復原功能新增至使用微服務架構建置的應用程式,請使用個別服務之間的 HTTP 要求,請執行下列步驟:
- 將
Microsoft.Extensions.Http.Resilience
套件新增至您的專案。 - 將復原處理常式新增至 HttpClient 服務呼叫。
- 設定復原策略。
將 NuGet 套件新增至您的專案
執行下列命令以新增復原 NuGet 套件:
dotnet add package Microsoft.Extensions.Http.Resilience
從應用程式專案資料夾中的終端機執行此命令,會將套件參考新增至項目檔。
然後在應用程式的啟動類別中新增下列 using 語句:
using Microsoft.Extensions.Http.Resilience;
新增復原策略
您現在可以將標準復原策略新增至 HttpClient 服務。 .NET 會提供這種結合了一些策略的現成可用設定。
要求處理程式會依左至右的順序,逐一查看這些策略:
- 總請求逾時策略:這設定請求所能花費的總時間。 您可以將此視為設定所有其他策略的最高時間限制。
- 重試策略:此策略會控制重試次數、退避和抖動的選項。 這些選項不能超過先前策略中設定的總逾時。
- 斷路器策略:如果故障率超過臨界值,此策略會開啟線路。
- 嘗試逾時策略:此策略會為每個個別要求設定逾時。 如果要求花費的時間超過這個時間,則會拋出例外狀況。
您可以透過新增此擴充方法,將此標準策略與所有預設值添加進來。
.AddStandardResilienceHandler();
例如,如果您已宣告 WebApplication
,而且您想要將復原策略新增至 HttpClient 服務,請使用下列程式代碼:
builder.Services.AddHttpClient<ServiceBeingCalled>(httpClient =>
{
httpClient.BaseAddress = new Uri("https://service.endpoint/");
}).AddStandardResilienceHandler();
上述程序代碼的第一行會將標準復原處理程式新增至 HTTPClient。 這會使用重試和斷路器策略的所有預設設定。
設定復原策略
您可以藉由指定新選項來變更任何策略的預設值,例如:
.AddStandardResilienceHandler( options =>
{
options.RetryOptions.RetryCount = 10;
options.RetryOptions.BaseDelay = TimeSpan.FromSeconds(1);
});
此程式碼會將重試策略的預設值變更為具有 10 次重試的數量上限,以使用線性輪詢,並使用 1 秒的基礎延遲。
您選擇的選項必須彼此相容。 例如,如果總時間維持為預設值 30 秒,則重試選項將會導致例外狀況。 這是一個錯誤,因為指數退避設定會導致完成 10 次重試的總時間為 2,046 秒。 這是運行時間例外狀況,而不是編譯時間錯誤。
下表列出每個策略可用的選項。
要求逾時選項總計 | 說明 |
---|---|
TotalTimeout | 要求可能需要的總時間量。 預設值為30秒。 |
OnTimeout | 當請求逾時時調用的回呼函式,預設值為 null。 |
重試選項 | 說明 |
---|---|
重試次數 | 重試次數上限。 預設值為 3。 |
BackoffType | 要使用的退避類型。 您可以選擇線性和指數。 預設值為指數。 |
UseJitter | 是否要將抖動新增至輪詢。 抖動會將隨機性新增至延遲,以有助於減少負載的尖峰。 默認值為 true。 |
BaseDelay | 重試之間的延遲。 預設值是 2 秒。 |
斷路器選項 | 說明 |
---|---|
休息時間 | 電路中斷持續時間 預設值為5秒。 |
失敗比率 | 會開啟線路之失敗要求和成功要求的比例。 預設值為 0.1。 |
取樣持續時間 | 計算失敗比率所需的時間長度。 預設值為30秒。 |
已關閉 | 關閉線路時所叫用的回呼函式。 預設值為 null。 |
OnHalfOpened | 當線路處於半開啟狀態時所叫用的回呼函式。 預設值為 null。 |
OnOpened | 在開啟線路時叫用的回呼函式。 預設值為 null。 |
嘗試逾時選項 | 說明 |
---|---|
逾時 | 要求可能需要的時間量。 預設值是 2 秒。 |
OnTimeout | 當請求逾時時調用的回呼函式,預設值為 null。 |
循序圖顯示每個策略如何在標準復原策略中共同運作。 首先,總逾時策略會控制要求可能需要多久的限制因素。 然後,重試策略必須設定為在總逾時內完成的重試次數上限。 如果故障率超過為其設定的閾值,斷路器策略將會開啟線路。 嘗試逾時策略會針對每個個別要求設定逾時。 如果要求花費的時間超過這個時間,則會拋出例外狀況。