Implementer robusthed i programmet

Fuldført

Robusthedsfunktionerne i .NET er baseret på Polly-projektet og gjort tilgængelige via Microsoft.Extensions. Du kan tilføje en standardstrategi for robusthed, der bruger fornuftige standarder, ved at føje en enkelt kodelinje til din app.

Føj robusthed til din app

Hvis du vil føje robusthed til en app, der er bygget ved hjælp af en mikrotjenestearkitektur, skal du benytte følgende fremgangsmåde ved hjælp af HTTP-anmodninger mellem individuelle tjenester:

  1. Føj Microsoft.Extensions.Http.Resilience-pakken til projektet.
  2. Føj en robusthedshandler til dine HttpClient-tjenestekald.
  3. Konfigurer robusthedsstrategien.

Føj NuGet-pakken til dit projekt

Kør følgende kommando for at tilføje den robuste NuGet-pakke:

dotnet add package Microsoft.Extensions.Http.Resilience

Hvis du kører denne kommando fra terminalen i mappen med appsprojekt, føjes pakkereferencen til projektfilen.

Tilføj derefter følgende using-sætning i startklassen for dit program:

using Microsoft.Extensions.Http.Resilience;

Tilføj en strategi for robusthed

Du kan nu føje en standardstrategi for robusthed til din HttpClient-tjeneste. .NET leverer denne fungerende konfiguration, der kombinerer en række strategier.

Et diagram, der viser de strategier, der er inkluderet i Standard Resilience Handler. Fra den overordnede timeout skal du prøve igen, skot, kredsløbsafbryder og timeout for forsøg.

Anmodningshandleren gennemgår hver af disse strategier i rækkefølge fra venstre mod højre:

  • Samlet timeoutstrategi for anmodning: Dette angiver den samlede mængde tid, som anmodningen kan tage. Du kan tænke på dette som at angive den øvre tidsgrænse for alle de andre strategier.
  • forsøgsstrategi: Denne strategi styrer indstillingerne for antallet af forsøg, backoff og jitter. Disse indstillinger kan ikke overskride den samlede timeout, der er angivet i den forrige strategi.
  • kredsløbsafbryderstrategi: Denne strategi åbner kredsløbet, hvis fejlforholdet overskrider tærsklen.
  • Timeoutstrategi for forsøg: Denne strategi angiver timeout for hver enkelt anmodning. Hvis anmodningen tager længere tid end denne tid, udløses der en undtagelse.

Du kan tilføje denne standardstrategi med alle standardværdierne ved at tilføje denne udvidelsesmetode:

.AddStandardResilienceHandler();

Hvis du f.eks. har erklæret en WebApplication, og du vil føje en robusthedsstrategi til HttpClient-tjenesten, skal du bruge denne kode:

builder.Services.AddHttpClient<ServiceBeingCalled>(httpClient =>
{
    httpClient.BaseAddress = new Uri("https://service.endpoint/");
}).AddStandardResilienceHandler();

Den første linje i den foregående kode føjer en standard robusthedshandler til HTTPClient. Dette bruger alle standardindstillingerne for strategierne for forsøg og kredsløbsafbryder.

Konfigurer robusthedsstrategien

Du kan ændre standardværdierne for en af strategierne ved at angive nye indstillinger, f.eks.:

.AddStandardResilienceHandler( options => 
{  
    options.RetryOptions.RetryCount = 10;
    options.RetryOptions.BaseDelay = TimeSpan.FromSeconds(1);
});

Denne kode ændrer den strategi for nye forsøg, der som standard har et maksimalt antal tilbagetrækninger på 10, for at bruge en lineær back off og bruge en basisforsinkelse på 1 sekund.

De indstillinger, du vælger, skal være kompatible med hinanden. Hvis den samlede tid f.eks. forbliver som standard på 30 sekunder, vil indstillingerne for forsøg medføre en undtagelse. Dette er en fejl, fordi indstillingen for eksponentiel backoff vil medføre, at den samlede tid til at fuldføre de 10 forsøg vil være 2.046 sekunder. Dette er en kørselsundtagelse, ikke en kompileringstidsfejl.

I følgende tabel vises de indstillinger, der er tilgængelige for hver af strategierne.

Samlet antal timeoutindstillinger for anmodninger Beskrivelse
TotalTimeout Den samlede mængde tid, som anmodningen kan tage. Standarden er 30 sekunder.
OnTimeout En tilbagekaldsfunktion, der aktiveres, når anmodningen får timeout. Standarden er null.

Indstillinger for forsøg igen Beskrivelse
Antal forsøg Det maksimale antal forsøg. Standarden er 3.
BackoffType Den type backoff, der skal bruges. Du kan vælge mellem lineær og eksponentiel. Standarden er eksponentiel.
UseJitter Om du vil føje jitter til backoff. Jitter tilføjer tilfældighed til forsinkelsen for at hjælpe med at reducere stigninger i belastningen. Standarden er true.
BaseDelay Forsinkelsen mellem nye forsøg. Standarden er 2 sekunder.

Indstillinger for kredsløbsafbryder Beskrivelse
Pausevarighed Varigheden af kredsløbsafbrydelsen. Standarden er 5 sekunder.
FailureRatio Forholdet mellem mislykkede anmodninger og vellykkede anmodninger, der åbner kredsløbet. Standarden er 0.1.
Udsnitsvarighed Varigheden af den tid, som fejlforholdet beregnes for. Standarden er 30 sekunder.
VedLukket En tilbagekaldsfunktion, der aktiveres, når kredsløbet lukkes. Standarden er null.
OnHalfOpened En tilbagekaldsfunktion, der aktiveres, når kredsløbet er halvt åbent. Standarden er null.
Vedåbnet En tilbagekaldsfunktion, der aktiveres, når kredsløbet åbnes. Standarden er null.

Timeoutindstillinger for forsøg Beskrivelse
Timeout Den mængde tid, som anmodningen kan tage. Standarden er 2 sekunder.
OnTimeout En tilbagekaldsfunktion, der aktiveres, når anmodningen får timeout. Standarden er null.

Et sekvensdiagram, der viser flowet af hændelser i et program ved hjælp af en robusthedsstrategi.

Sekvensdiagrammet viser, hvordan hver af strategierne arbejder sammen i en standardstrategi for robusthed. Til at begynde med styrer den samlede timeoutstrategi den begrænsende faktor for, hvor lang tid en anmodning kan tage. Forsøgsstrategien skal derefter indstilles til at have et maksimalt antal forsøg, der fuldføres inden for den samlede timeout. Kredsløbsafbryderstrategien åbner kredsløbet, hvis fejlforholdet overskrider den grænse, der er angivet for det. Forsøgstimeoutstrategien angiver timeout for hver enkelt anmodning. Hvis anmodningen tager længere tid end denne tid, udløses der en undtagelse.