Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
PLATÍ PRO: Všechny úrovně služby API Management
Zásady retry spustí své podřízené zásady jednou a pak se znovu pokusí provést, dokud se opakování condition nevyčerpá false nebo se nevyčerpá count .
Zásady retry mohou obsahovat jakékoli jiné zásady jako podřízené prvky s výjimkou wait zásad.
Poznámka:
Nastavte prvky zásad a podřízené prvky v pořadí uvedeném v prohlášení o zásadách. Přečtěte si další informace o tom, jak nastavit nebo upravit zásady služby API Management.
Prohlášení o zásadách
<retry
condition="Boolean expression or literal"
count="number of retry attempts"
interval="retry interval in seconds"
max-interval="maximum retry interval in seconds"
delta="retry interval delta in seconds"
first-fast-retry="boolean expression or literal">
<!-- One or more child policies. No restrictions. -->
</retry>
Atributy
| Atribut | Popis | Požaduje se | Výchozí |
|---|---|---|---|
| podmínka | Logický. Určuje, jestli se mají opakování zastavit (false) nebo pokračovat (true). Výrazy zásad jsou povolené. |
Ano | – |
| počítat | Kladné číslo mezi 1 a 50 určující počet opakovaných pokusů o pokus. Výrazy zásad jsou povolené. | Ano | – |
| interval | Kladné číslo v sekundách určující interval čekání mezi pokusy o opakování. Výrazy zásad jsou povolené. | Ano | – |
| max-interval | Kladné číslo v sekundách určující maximální interval čekání mezi pokusy o opakování. Používá se k implementaci exponenciálního algoritmu opakování. Výrazy zásad jsou povolené. | Ne | – |
| Delta | Kladné číslo v sekundách určující přírůstek intervalu čekání. Používá se k implementaci lineárních a exponenciálních algoritmů opakování. Výrazy zásad jsou povolené. | Ne | – |
| first-fast-retry | Logický. Pokud je nastavená hodnota true, první pokus o opakování se provede okamžitě. Výrazy zásad jsou povolené. |
Ne | false |
Opakování doby čekání
Pokud je zadána pouze hodnota
interval, provede se opakování s pevným intervalem.Pokud jsou zadány
intervalpouze adeltajsou zadány, použije se algoritmus opakování lineárního intervalu. Doba čekání mezi opakovanými pokusy se zvýší podle následujícího vzorce:interval + (count - 1)*delta.intervalmax-intervalPo zadání adeltazadání se použije algoritmus opakování exponenciálního intervalu. Doba čekání mezi opakovanými pokusy se exponenciálně zvyšuje podle následujícího vzorce:interval + (2^(count - 1)) * random(delta * 0.8, delta * 1.2)až do maximálního intervalu nastaveného parametremmax-interval.Pokud je například
intervalobojídeltanastavené na 10 sekund amax-intervalje 100 sekund, přibližná doba čekání mezi opakovanými pokusy se zvýší takto: 10 sekund, 20 sekund, 40 sekund, 80 sekund a doba čekání 100 sekund použitá pro zbývající opakování.
Elementy
Zásady retry mohou obsahovat jakékoli jiné zásady jako podřízené prvky s výjimkou wait zásad.
Využití
- Oddíly zásad: příchozí, odchozí, back-end, on-error
- Obory zásad: globální, pracovní prostor, produkt, rozhraní API, operace
- Brány: Classic, v2, consumption, self-host, workspace
Poznámky k využití
- Zásada provede podřízené zásady v
retrybloku předtím, než vyhodnotíconditionspuštění prvního pokusu o opakování.
Příklady
Předávání požadavků s exponenciálním opakováním
V následujícím příkladu se předávání požadavků opakuje až desetkrát pomocí exponenciálního algoritmu opakování. Vzhledem k tomu first-fast-retry , že je nastavená hodnota false, všechny pokusy o opakování podléhají exponenciálnímu zvýšení doby čekání opakování (v tomto příkladu přibližně 10 sekund, 20 sekund, 40 sekund, ...), až do maximálního max-intervalčekání .
<retry
condition="@(context.Response.StatusCode == 500)"
count="10"
interval="10"
max-interval="100"
delta="10"
first-fast-retry="false">
<forward-request buffer-request-body="true" />
</retry>
Odeslání požadavku při selhání počátečního požadavku
V následujícím příkladu se odeslání požadavku na jinou adresu URL než definovaný back-end opakuje až třikrát, pokud dojde k vyřazení nebo vypršení časového limitu připojení nebo k chybě na straně serveru. Vzhledem k tomu first-fast-retry , že je nastavená hodnota true, první opakování se spustí okamžitě po selhání počátečního požadavku. Mějte na paměti, že send-request musí být nastavena ignore-error na hodnotu true, aby response-variable-name v případě chyby byla null.
<retry
condition="@(context.Variables["response"] == null || ((IResponse)context.Variables["response"]).StatusCode >= 500)"
count="3"
interval="1"
first-fast-retry="true">
<send-request
mode="new"
response-variable-name="response"
timeout="3"
ignore-error="true">
<set-url>https://api.contoso.com/products/5</set-url>
<set-method>GET</set-method>
</send-request>
</retry>
Přepnutí back-endu při přijetí chyby
V následujícím příkladu se počáteční požadavek odešle do primárního back-endu. Pokud se vrátí stavový 429 Too Many Requests kód odpovědi, požadavek se okamžitě opakuje a předá sekundárnímu back-endu.
<backend>
<retry
condition="@(context.Response != null && context.Response.StatusCode == 429)"
count="1"
interval="1"
first-fast-retry="true">
<set-variable name="attempt-count" value="@(context.Variables.GetValueOrDefault<int>("attempt-count", 0)+1)" />
<set-backend-service backend-id="@(context.Variables.GetValueOrDefault<int>("attempt-count") < 2 ? "primary-backend" : "secondary-backend" )" />
<forward-request />
</retry>
</backend>
Návod
Alternativně můžete nakonfigurovat back-endový prostředek s pravidly jističe pro detekci chybových podmínek a fondu s vyrovnáváním zatížení, který distribuuje požadavky napříč několika back-endy.
Související zásady
Související obsah
Další informace o práci se zásadami najdete v tématech:
- Kurz: Transformace a ochrana rozhraní API
- Referenční informace o zásadách pro úplný seznam prohlášení o zásadách a jejich nastavení
- Výrazy zásad
- Nastavení nebo úprava zásad
- Opakované použití konfigurací zásad
- Úložiště fragmentů zásad
- Úložiště dětského hřiště zásad
- Sada nástrojů zásad služby Azure API Management
- Získejte asistenci Copilotu při vytváření, vysvětlování a řešení problémů se zásadami.