Implementera programåterhämtning
Återhämtningsfunktionerna i .NET bygger på Polly-projektet och görs tillgängliga via Microsoft.Extensions
. Du kan lägga till en standardstrategi för motståndskraft som använder lämpliga standardvärden genom att lägga till en enda kodrad i din app.
Lägga till motståndskraft i din app
Utför följande steg för att lägga till motståndskraft i en app som skapats med hjälp av en mikrotjänstarkitektur med hjälp av HTTP-begäranden mellan enskilda tjänster:
- Lägg till paketet i
Microsoft.Extensions.Http.Resilience
projektet. - Lägg till en motståndskraftshanterare i dina HttpClient-tjänstanrop.
- Konfigurera återhämtningsstrategin.
Lägg till NuGet-paketet i projektet
Kör följande kommando för att lägga till NuGet-paketet för återhämtning:
dotnet add package Microsoft.Extensions.Http.Resilience
Om du kör det här kommandot från terminalen i programprojektmappen läggs paketreferensen till i projektfilen.
I programmets startklass lägger du sedan till följande instruktion med hjälp av instruktionen:
using Microsoft.Extensions.Http.Resilience;
Lägga till en återhämtningsstrategi
Nu kan du lägga till en standardstrategi för motståndskraft i din HttpClient-tjänst. .NET tillhandahåller den här färdiga konfigurationen som kombinerar ett antal strategier.
Begärandehanteraren går igenom var och en av ovanstående strategier i ordning från vänster till höger:
- Total timeout-strategi för begäran: Detta anger en total tid som begäran kan ta. Du kan se detta som att ange den övre tidsgränsen för alla andra strategier.
- Strategi för återförsök: Den här strategin styr alternativen för antal återförsök, backoff och jitter. De här alternativen får inte överskrida den totala tidsgränsen som angavs i föregående strategi.
- Strategi för kretsbrytare: Den här strategin öppnar kretsen om felförhållandet överskrider tröskelvärdet.
- Timeout-strategi för försök: Den här strategin anger en tidsgräns för varje enskild begäran. Om begäran tar längre tid än den här gången utlöses ett undantag.
Du kan lägga till den här standardstrategin med alla standardvärden genom att lägga till den här tilläggsmetoden:
.AddStandardResilienceHandler();
Om du till exempel har deklarerat en WebApplication
, och vill lägga till en återhämtningsstrategi i HttpClient-tjänsten använder du den här koden:
builder.Services.AddHttpClient<ServiceBeingCalled>(httpClient =>
{
httpClient.BaseAddress = new Uri("https://service.endpoint/");
}).AddStandardResilienceHandler();
Den första raden i koden ovan lägger till en standardresilienshanterare till HTTPClient. Detta använder alla standardinställningar för strategierna för återförsök och kretsbrytare.
Konfigurera återhämtningsstrategin
Du kan ändra standardvärdena för någon av strategierna genom att ange nya alternativ, till exempel:
.AddStandardResilienceHandler( options =>
{
options.RetryOptions.RetryCount = 10;
options.RetryOptions.BaseDelay = TimeSpan.FromSeconds(1);
});
Den här koden ändrar återförsöksstrategin till att ha ett maximalt antal borttagningar på 10, att använda en linjär back off och använda en basfördröjning på 1 sekund.
De alternativ du väljer måste vara kompatibla med varandra. Om den totala tiden till exempel förblir som standard på 30 sekunder, orsakar återförsöksalternativen ovan ett undantag. Det här är ett fel eftersom inställningen för exponentiell backoff skulle göra att den totala tiden för att slutföra de 10 återförsöken blir 2 046 sekunder. Det här är ett körningsundund undantag, inte ett kompileringstidsfel.
I följande tabell visas de alternativ som är tillgängliga för var och en av strategierna.
Totalt antal timeoutalternativ för begäran | Description |
---|---|
TotalTimeout | Den totala tid som begäran kan ta. Standardvärdet är 30 sekunder. |
OnTimeout | En återanropsfunktion som anropas när begäran överskrider tidsgränsen. Standardvärdet är null. |
Alternativ för återförsök | Description |
---|---|
RetryCount | Max. antal återförsök. Standardvärdet är 3. |
BackoffType | Vilken typ av backoff som ska användas. Du kan välja mellan linjär och exponentiell. Standardvärdet är exponentiellt. |
UseJitter | Om du vill lägga till jitter i backoffen. Jitter lägger till slumpmässighet i fördröjningen för att minska belastningstopparna. Standardvärdet är sant. |
BaseDelay | Fördröjningen mellan återförsök. Standardvärdet är 2 sekunder. |
Alternativ för kretsbrytare | Description |
---|---|
BreakDuration | Varaktigheten för kretsbrytningen. Standardvärdet är 5 sekunder. |
FailureRatio | Förhållandet mellan misslyckade begäranden och lyckade begäranden som öppnar kretsen. Standardvärdet är 0.1. |
SamplingDuration | Varaktigheten för den tid som felförhållandet beräknas över. Standardvärdet är 30 sekunder. |
Omsluten | En återanropsfunktion som anropas när kretsen stängs. Standardvärdet är null. |
OnHalfOpened | En återanropsfunktion som anropas när kretsen är halvöppen. Standardvärdet är null. |
OnOpened | En återanropsfunktion som anropas när kretsen öppnas. Standardvärdet är null. |
Timeoutalternativ för försök | Description |
---|---|
Timeout | Hur lång tid begäran kan ta. Standardvärdet är 2 sekunder. |
OnTimeout | En återanropsfunktion som anropas när begäran överskrider tidsgränsen. Standardvärdet är null. |
Sekvensdiagrammet ovan visar hur var och en av strategierna fungerar tillsammans i en standardstrategi för återhämtning. Till att börja med styrs begränsningsfaktorn för hur lång tid en begäran kan ta av den totala tidsgränsstrategin. Återförsöksstrategin måste sedan anges till att ha ett maximalt antal återförsök som slutförs inom den totala tidsgränsen. Kretsbrytarestrategin öppnar kretsen om felförhållandet överskrider det tröskelvärde som angetts för den. Timeout-strategin för försök anger en tidsgräns för varje enskild begäran. Om begäran tar längre tid än den här gången utlöses ett undantag.