實作應用程式彈性

已完成

.NET 的復原功能建置在 Polly 專案上,並透過 Microsoft.Extensions提供。 您可以將單行程式代碼新增至您的應用程式,以新增使用合理預設值的標準復原策略。

將復原功能新增至您的應用程式

若要將復原功能新增至使用微服務架構建置的應用程式,請使用個別服務之間的 HTTP 要求,請執行下列步驟:

  1. Microsoft.Extensions.Http.Resilience 套件新增至您的專案。
  2. 將復原處理常式新增至 HttpClient 服務呼叫。
  3. 設定復原策略。

將 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。

此順序圖顯示應用程式中使用復原策略的事件流程。

循序圖顯示每個策略如何在標準復原策略中共同運作。 首先,總逾時策略會控制要求可能需要多久的限制因素。 然後,重試策略必須設定為在總逾時內完成的重試次數上限。 如果故障率超過為其設定的閾值,斷路器策略將會開啟線路。 嘗試逾時策略會針對每個個別要求設定逾時。 如果要求花費的時間超過這個時間,則會拋出例外狀況。