Sdílet prostřednictvím


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 a delta 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.

  • intervalmax-interval Po zadání a delta 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 parametrem max-interval.

    Pokud je například interval obojí delta nastavené na 10 sekund a max-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>

Další informace o práci se zásadami najdete v tématech: