Zkusit znovu
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
.
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í |
---|---|---|---|
condition | Logický. Určuje, jestli se mají opakování zastavit (false ) nebo pokračovat (true ). Výrazy zásad jsou povolené. |
Yes | – |
count | Kladné číslo mezi 1 a 50 určující počet opakovaných pokusů o pokus. Výrazy zásad jsou povolené. | Yes | – |
interval | Kladné číslo v sekundách určující interval čekání mezi pokusy o opakování. Výrazy zásad jsou povolené. | Yes | – |
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é. | No | – |
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é. | No | – |
first-fast-retry | Logický. Pokud je nastavená hodnota true , první pokus o opakování se provede okamžitě. Výrazy zásad jsou povolené. |
No | 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
interval
pouze adelta
jsou 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
.interval
max-interval
Po zadání adelta
zadá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
interval
obojídelta
nastavené na 10 sekund amax-interval
je 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.
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
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>
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
- Sada nástrojů zásad služby Azure API Management
- Vytváření zásad pomocí Microsoft Copilotu v Azure