Opnieuw proberen

VAN TOEPASSING OP: Alle API Management-lagen

Het retry beleid voert het onderliggende beleid eenmaal uit en voert vervolgens de uitvoering opnieuw uit totdat het opnieuw condition wordt false geprobeerd of opnieuw count wordt geprobeerd.

Notitie

Stel de elementen en onderliggende elementen van het beleid in de volgorde in die in de beleidsverklaring is opgegeven. Meer informatie over het instellen of bewerken van API Management-beleid.

Beleidsinstructie

<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>

Kenmerken

Kenmerk Beschrijving Vereist Standaardinstelling
voorwaarde Booleaans. Hiermee geeft u op of nieuwe pogingen moeten worden gestopt (false) of voortgezet (true). Beleidsexpressies zijn toegestaan. Ja N.v.t.
aantal Een positief getal tussen 1 en 50 waarmee het aantal nieuwe pogingen wordt opgegeven. Beleidsexpressies zijn toegestaan. Ja N.v.t.
interval Een positief getal in seconden dat het wachttijdsinterval tussen de nieuwe pogingen aangeeft. Beleidsexpressies zijn toegestaan. Ja N.v.t.
max-interval Een positief getal in seconden dat het maximale wachttijdsinterval tussen de nieuwe pogingen aangeeft. Het wordt gebruikt om een algoritme voor exponentieel opnieuw proberen te implementeren. Beleidsexpressies zijn toegestaan. Nee N.v.t.
delta Een positief getal in seconden dat de increment van het wachttijdinterval aangeeft. Het wordt gebruikt om de lineaire en exponentiële algoritmen voor opnieuw proberen te implementeren. Beleidsexpressies zijn toegestaan. Nee N.v.t.
first-fast-retry Booleaans. Als deze optie is ingesteld true, wordt de eerste nieuwe poging onmiddellijk uitgevoerd. Beleidsexpressies zijn toegestaan. Nee false

Wachttijden voor opnieuw proberen

  • Wanneer alleen de interval opgegeven is, worden nieuwe pogingen met een vast interval uitgevoerd.

  • Wanneer alleen de interval en delta zijn opgegeven, wordt een algoritme voor het opnieuw proberen van een lineair interval gebruikt. De wachttijd tussen nieuwe pogingen neemt toe volgens de volgende formule: interval + (count - 1)*delta.

  • Wanneer de intervalen max-intervaldelta zijn opgegeven, wordt een algoritme voor exponentieel interval opnieuw proberen toegepast. De wachttijd tussen de nieuwe pogingen neemt exponentieel toe volgens de volgende formule: interval + (2^count - 1) * random(delta * 0.8, delta * 1.2), tot een maximuminterval dat is ingesteld door max-interval.

    Wanneer interval en delta beide zijn ingesteld op 10 seconden en max-interval 100 seconden is, neemt de geschatte wachttijd tussen nieuwe pogingen als volgt toe: 10 seconden, 20 seconden, 40 seconden, 80 seconden, met 100 seconden wachttijd voor resterende pogingen.

Elementen

Het retry beleid kan andere beleidsregels bevatten als onderliggende elementen.

Gebruik

Voorbeelden

Doorsturen aanvragen met exponentieel opnieuw proberen

In het volgende voorbeeld wordt het doorsturen van aanvragen maximaal tien keer opnieuw geprobeerd met behulp van een algoritme voor exponentieel opnieuw proberen. Aangezien first-fast-retry dit is ingesteld false, zijn alle nieuwe pogingen onderhevig aan exponentieel toenemende wachttijden voor opnieuw proberen (in dit voorbeeld ongeveer 10 seconden, 20 seconden, 40 seconden, ...), tot een maximale wachttijd van max-interval.

<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>

Aanvraag verzenden na mislukte eerste aanvraag

In het volgende voorbeeld wordt het verzenden van een aanvraag naar een andere URL dan de gedefinieerde back-end maximaal drie keer geprobeerd als de verbinding is verbroken/een time-out opgetreden, of de aanvraag resulteert in een fout aan de serverzijde. Omdat first-fast-retry deze is ingesteld op true, wordt de eerste nieuwe poging direct na de eerste aanvraagfout uitgevoerd. Houd er rekening mee dat send-request deze moet worden ingesteld ignore-error op true om response-variable-name null te kunnen zijn in het geval van een fout.


<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>

Zie voor meer informatie over het werken met beleid: