Implementace odolnosti aplikací
Funkce odolnosti rozhraní .NET jsou založené na projektu Polly a jsou dostupné prostřednictvím Microsoft.Extensions
. Můžete přidat standardní strategii odolnosti, která používá rozumné výchozí hodnoty, a to přidáním jednoho řádku kódu do aplikace.
Přidání odolnosti do aplikace
Pokud chcete do aplikace vytvořené pomocí architektury mikroslužeb přidat odolnost, použijte požadavky HTTP mezi jednotlivými službami takto:
- Přidejte balíček
Microsoft.Extensions.Http.Resilience
do projektu. - Přidejte obslužnou rutinu odolnosti do volání služby HttpClient.
- Nakonfigurujte strategii odolnosti.
Přidání balíčku NuGet do projektu
Spuštěním následujícího příkazu přidejte balíček NuGet odolnosti:
dotnet add package Microsoft.Extensions.Http.Resilience
Spuštěním tohoto příkazu z terminálu ve složce projektu aplikací přidáte odkaz na balíček do souboru projektu.
Do spouštěcí třídy vaší aplikace přidejte následující příkaz using:
using Microsoft.Extensions.Http.Resilience;
Přidání strategie odolnosti
Do služby HttpClient teď můžete přidat standardní strategii odolnosti. .NET poskytuje tuto předefinované konfiguraci, která kombinuje řadu strategií.
Obslužná rutina požadavku prochází každou z výše uvedených strategií v pořadí odleva doprava:
- Celková strategie časového limitu žádosti: Nastaví se celková doba, kterou může žádost trvat. Můžete si to představit jako nastavení horního časového limitu pro všechny ostatní strategie.
- Strategie opakování: Tato strategie řídí možnosti počtu opakování, opakování a zpoždění. Tyto možnosti nemůžou překročit celkový časový limit nastavený v předchozí strategii.
- Strategie jističe: Tato strategie otevře okruh, pokud poměr selhání překročí prahovou hodnotu.
- Strategie vypršení časového limitu pokusu: Tato strategie nastavuje časový limit pro každý jednotlivý požadavek. Pokud požadavek trvá déle, než je tento čas, vyvolá se výjimka.
Tuto standardní strategii můžete přidat se všemi výchozími hodnotami přidáním této metody rozšíření:
.AddStandardResilienceHandler();
Pokud jste například deklarovali WebApplication
, a chcete do služby HttpClient přidat strategii odolnosti, použijte tento kód:
builder.Services.AddHttpClient<ServiceBeingCalled>(httpClient =>
{
httpClient.BaseAddress = new Uri("https://service.endpoint/");
}).AddStandardResilienceHandler();
První řádek výše uvedeného kódu přidá do HTTPClient standardní obslužnou rutinu odolnosti. Použije se všechna výchozí nastavení pro strategie opakování a jističe.
Konfigurace strategie odolnosti
Výchozí hodnoty jakékoli strategie můžete změnit zadáním nových možností, například:
.AddStandardResilienceHandler( options =>
{
options.RetryOptions.RetryCount = 10;
options.RetryOptions.BaseDelay = TimeSpan.FromSeconds(1);
});
Tento kód změní výchozí strategii opakování tak, aby měla maximální počet vyřazení z provozu 10, aby bylo možné použít lineární zpětné ukončení a použít základní zpoždění 1 sekundu.
Možnosti, které zvolíte, musí být vzájemně kompatibilní. Pokud například celkový čas zůstane ve výchozím nastavení 30 sekund, výše uvedené možnosti opakování způsobí výjimku. Jedná se o chybu, protože exponenciální nastavení zpětného ukončení by způsobilo celkový čas dokončení 10 opakovaných pokusů o 2046 sekund. Jedná se o výjimku za běhu, ne o chybu v době kompilace.
V následující tabulce jsou uvedeny možnosti dostupné pro jednotlivé strategie.
Celkové možnosti časového limitu požadavku | Popis |
---|---|
TotalTimeout | Celková doba, po kterou může žádost trvat. Výchozí hodnota je 30 sekund. |
OnTimeout | Funkce zpětného volání, která se vyvolá při vypršení časového limitu požadavku. Výchozí hodnota je null. |
Možnosti opakování | Popis |
---|---|
RetryCount | Maximální počet opakování. Výchozí hodnota je 3. |
BackoffType | Typ zpětného odvrácení, který se má použít. Můžete si vybrat mezi lineárním a exponenciálním. Výchozí hodnota je exponenciální. |
UseJitter | Zda přidat jitter do zpoždí. Jitter přidává ke zpoždění náhodnost, která pomáhá snížit špičky zatížení. Výchozí hodnota je true. |
BaseDelay | Zpoždění mezi opakovanými pokusy. Výchozí hodnota je 2 sekundy. |
Možnosti jističe | Popis |
---|---|
BreakDuration | Doba trvání přerušení okruhu. Výchozí hodnota je 5 sekund. |
FailureRatio | Poměr neúspěšných požadavků na úspěšné žádosti, které otevřou okruh. Výchozí hodnota je 0,1. |
SamplingDuration | Doba, po kterou se vypočítá poměr selhání. Výchozí hodnota je 30 sekund. |
OnClosed | Funkce zpětného volání, která se vyvolá při zavření okruhu. Výchozí hodnota je null. |
OnHalfOpened | Funkce zpětného volání, která se vyvolá, když je okruh napůl otevřený. Výchozí hodnota je null. |
OnOpened | Funkce zpětného volání, která se vyvolá při otevření okruhu. Výchozí hodnota je null. |
Možnosti vypršení časového limitu pokusu | Popis |
---|---|
Timeout | Doba, po kterou může žádost trvat. Výchozí hodnota je 2 sekundy. |
OnTimeout | Funkce zpětného volání, která se vyvolá při vypršení časového limitu požadavku. Výchozí hodnota je null. |
Výše uvedený sekvenční diagram ukazuje, jak jednotlivé strategie spolupracují ve standardní strategii odolnosti. Pokud chcete začít limitovacím faktorem, jak dlouho může požadavek trvat, řídí se celková strategie časového limitu. Strategie opakování se pak musí nastavit tak, aby měla maximální počet opakování, které se dokončí v rámci celkového časového limitu. Strategie jističe otevře okruh, pokud poměr selhání překročí prahovou hodnotu nastavenou pro něj. Strategie časového limitu pokusu nastaví časový limit pro každý jednotlivý požadavek. Pokud požadavek trvá déle, než je tento čas, vyvolá se výjimka.