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 do projektu balíček
Microsoft.Extensions.Http.Resilience. - Přidejte mechanismus 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.
Pak 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ředdefinovanou konfiguraci, která kombinuje řadu strategií.
Zpracovatel požadavku prochází každou z těchto strategií v pořadí zleva 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 týkající se počtu opakování, zpoždění a náhodného rozptylu. Tyto možnosti nemůžou překročit celkový časový limit nastavený v předchozí strategii.
- Strategie vypínače: Tato strategie přeruší okruh, pokud poměr selhání překročí prahovou hodnotu.
- Strategie časového limitu pokusu: Tato strategie nastaví č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 WebApplicationa 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 předchozího kódu přidá standardní obslužnou rutinu odolnosti do HTTP klienta. Použijí se všechna výchozí nastavení pro strategie opakování a pro strategii 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, 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, že celkový čas dokončení 10 opakování bude 2 046 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 |
|---|---|
| Celkový Časový Limit | 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 |
|---|---|
| Počet opakování | Maximální počet opakování. Výchozí hodnota je 3. |
| Typ odsunu | Typ zpomalení, 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 k časovému zpoždění. 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 |
|---|---|
| DélkaPřestávky | Doba trvání přerušení okruhu. Výchozí hodnota je 5 sekund. |
| Poměr selhání | Poměr neúspěšných požadavků na úspěšné žádosti, které otevřou okruh. Výchozí hodnota je 0,1. |
| DobaVzorkování | 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. |
| NapůlOtevřeno | 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ává při otevření okruhu. Výchozí hodnota je null. |
| Možnosti vypršení časového limitu pokusu | Popis |
|---|---|
| Přerušení zápasu | 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. |
Sekvenční diagram znázorňuje, jak jednotlivé strategie spolupracují ve standardní strategii odolnosti. Na začátek, strategie celkového časového limitu řídí limitující faktor, který určuje, jak dlouho může žádost trvat. 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. Strategii jističe otevře obvod, pokud součinitel selhání překročí nastavenou prahovou hodnotu. Strategie časového limitu pro pokusy nastaví časový limit pro každý jednotlivý požadavek. Pokud požadavek trvá déle, než je tento čas, vyvolá se výjimka.