Alkalmazásrugalmasság megvalósítása

Befejeződött

A .NET rugalmassági funkciói a Polly-projektre épülnek, és Microsoft.Extensionskeresztül érhetők el. Egy szabványos rugalmassági stratégiát adhat hozzá, amely ésszerű alapértelmezett értékeket használ, ha egyetlen kódsort ad hozzá az alkalmazáshoz.

Rugalmasság hozzáadása az alkalmazáshoz

Ha rugalmasságot szeretne hozzáadni egy mikroszolgáltatás-architektúrával létrehozott alkalmazáshoz az egyes szolgáltatások közötti HTTP-kérések használatával, hajtsa végre az alábbi lépéseket:

  1. Adja hozzá a Microsoft.Extensions.Http.Resilience csomagot a projekthez.
  2. Adjon hozzá egy rugalmasságkezelőt a HttpClient-szolgáltatáshívásokhoz.
  3. Konfigurálja a rugalmassági stratégiát.

A NuGet-csomag hozzáadása a projekthez

Futtassa a következő parancsot a rugalmassági NuGet-csomag hozzáadásához:

dotnet add package Microsoft.Extensions.Http.Resilience

Ha ezt a parancsot az alkalmazások projektmappájában futtatja a terminálról, hozzáadja a csomaghivatkozást a projektfájlhoz.

Ezután adja hozzá a következő parancsot az alkalmazás indítási osztályához:

using Microsoft.Extensions.Http.Resilience;

Rugalmassági stratégia hozzáadása

Mostantól hozzáadhat egy szabványos rugalmassági stratégiát a HttpClient-szolgáltatáshoz. A .NET ezt a beépített konfigurációt biztosítja, amely számos stratégiát kombinál.

A Standard Resilience Handlerben szereplő stratégiákat bemutató diagram. Az általános időtúllépéstől kezdve az újrapróbálkozástól, a válaszfaltól, a megszakítótól és a kísérlet időtúllépésétől.

A kéréskezelő az alábbi stratégiák mindegyikén végighalad, balról jobbra haladva:

  • Összes kérelem időtúllépési stratégiája: Ez meghatározza a kérés által felhasználható maximális időtartamot. Erre úgy is gondolhat, mint az összes többi stratégia felső időkorlátjának beállítására.
  • Újrapróbálkozási stratégia: Ez a stratégia szabályozza az újrapróbálkozási, visszalépési és jitter-beállításokat. Ezek a beállítások nem haladhatják meg az előző stratégiában beállított teljes időtúllépést.
  • Megszakító stratégia: Ez a stratégia megszakítja az áramkört, ha a meghibásodási arány meghaladja a küszöbértéket.
  • Kísérlet időtúllépési stratégiája: Ez a stratégia minden egyes kéréshez időtúllépést állít be. Ha a kérés ennél az időnél tovább tart, akkor kivétel lép fel.

Ezt a standard stratégiát az összes alapértelmezett értékkel hozzáadhatja a bővítménymetódus hozzáadásával:

.AddStandardResilienceHandler();

Ha például deklarált egy WebApplication, és rugalmassági stratégiát szeretne hozzáadni a HttpClient szolgáltatáshoz, használja ezt a kódot:

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

Az előző kód első sora egy standard rugalmasságkezelőt ad hozzá a HTTPClienthez. Ez az újrapróbálkozás és az áramkör-megszakító stratégiák összes alapértelmezett beállítását fogja használni.

A rugalmassági stratégia konfigurálása

Bármelyik stratégia alapértelmezett értékeit módosíthatja új beállítások megadásával, például:

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

Ez a kód az újrapróbálkozási stratégiát alapértelmezés szerint úgy módosítja, hogy a kivonások maximális száma 10 legyen, lineáris visszatartást használjon, és 1 másodperces alapkéséssítést használjon.

A választott beállításoknak kompatibilisnek kell lenniük egymással. Ha például a teljes idő 30 másodperces alapértelmezett értékként marad, akkor az újrapróbálkozás beállításai kivételt okoznak. Ez azért hiba, mert az exponenciális visszalépési beállítás miatt a 10 újrapróbálkozás teljes időtartama 2046 másodperc lesz. Ez egy futásidejű kivétel, nem fordítási időhiba.

Az alábbi táblázat az egyes stratégiákhoz elérhető lehetőségeket sorolja fel.

Összes kérelem időtúllépési beállításai Leírás
Teljes időkorlát A kérelem teljes időtartama. Az alapértelmezett érték 30 másodperc.
OnTimeout Egy visszahívási függvény, amely akkor lesz meghívva, amikor a kérés túllépi az időkorlátot. Az alapértelmezett érték null.

Újrapróbálkozás beállításai Leírás
ÚjrapróbálkozásiSzám Az újrapróbálkozések maximális száma. Az alapértelmezett érték 3.
VisszalépésiTípus A használni kívánt visszalépés típusa. A lineáris és az exponenciális lehetőségek közül választhat. Az alapértelmezett érték exponenciális.
Használja a Jittert Azon, hogy a backoff algoritmushoz hozzáadjon-e jittert. A Jitter véletlen elemet ad a késéshez, hogy csökkentse a terhelési csúcsokat. Az alapértelmezett érték igaz.
BaseDelay Az újrapróbálkozások közötti késés. Az alapértelmezett érték 2 másodperc.

Megszakító beállításai Leírás
Szünetidőtartam Az áramkör megszakadásának időtartama. Az alapértelmezett érték 5 másodperc.
FailureRatio A sikertelen kérések aránya a sikeres kérésekhez, amely megnyitja az áramkört. Az alapértelmezett érték a 0.1.
MintavételIdőtartam A hibaarány kiszámításának időtartama. Az alapértelmezett érték 30 másodperc.
OnClosed Egy visszahívási függvény, amely a kör bezárásakor kerül meghívásra. Az alapértelmezett érték null.
OnHalfOpened Egy visszahívási függvény, amely akkor lesz meghívva, amikor az áramkör félig nyitva van. Az alapértelmezett érték null.
OnOpened Egy visszahívási függvény, amelyet akkor hívnak meg, amikor az áramkör megnyílik. Az alapértelmezett érték null.

Időtúllépési beállítási lehetőségek Leírás
Időkorlát A kérelem időtartama. Az alapértelmezett érték 2 másodperc.
OnTimeout Egy visszahívási függvény, amely akkor lesz meghívva, amikor a kérés túllépi az időkorlátot. Az alapértelmezett érték null.

Egy folyamatábra, amely egy alkalmazás eseményfolyamát mutatja be egy rugalmassági stratégia használatával.

A szekvenciadiagram bemutatja, hogyan működnek együtt az egyes stratégiák egy szabványos rugalmassági stratégiában. Először is a teljes időtúllépési stratégia határozza meg, hogy a kérések mennyi ideig tarthatnak. Az újrapróbálkozási stratégiát ezután úgy kell beállítani, hogy a teljes időtúllépésen belül befejeződő újrapróbálkozási próbálkozások maximális száma legyen. Az áramkör-megszakító stratégia megnyitja a áramkört, ha a meghibásodási arány meghaladja a beállított küszöbértéket. A kísérlet időtúllépési stratégiája minden egyes kéréshez időtúllépést állít be. Ha a kérés ennél az időnél tovább tart, akkor kivétel lép fel.