Opnieuw proberen

Het retry beleid voert het onderliggende beleid eenmaal uit en voert vervolgens de uitvoering ervan opnieuw uit totdat de nieuwe poging condition wordt false of is count uitgeput.

Notitie

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

Beleidsverklaring

<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 Standaard
Voorwaarde Een booleaanse letterlijke waarde of expressie die aangeeft of nieuwe pogingen moeten worden gestopt (false) of moeten worden voortgezet (true). Ja N.v.t.
count Een positief getal dat het maximum aantal nieuwe pogingen aangeeft dat moet worden geprobeerd. Ja N.v.t.
interval Een positief getal in seconden dat het wachtinterval tussen de nieuwe pogingen aangeeft. Ja N.v.t.
max-interval Een positief getal in seconden dat het maximale wachttijd tussen de nieuwe pogingen aangeeft. Het wordt gebruikt om een algoritme voor exponentieel opnieuw proberen te implementeren. Nee N.v.t.
delta Een positief getal in seconden dat de toename van het wachtinterval aangeeft. Het wordt gebruikt om de lineaire en exponentiële algoritmen voor opnieuw proberen te implementeren. Nee N.v.t.
first-fast-retry Als dit is ingesteld op true , wordt de eerste nieuwe poging onmiddellijk uitgevoerd. No false

Wachttijden voor opnieuw proberen

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

  • Wanneer alleen de interval en delta zijn opgegeven, wordt een algoritme voor opnieuw proberen met 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 opnieuw proberen van exponentieel interval 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 bijvoorbeeld zijn ingesteld op 10 seconden en max-interval 100 seconden is, neemt de wachttijd tussen nieuwe pogingen ongeveer als volgt toe: 10 seconden, 20 seconden, 40 seconden, 80 seconden, met 100 seconden wachttijd voor resterende nieuwe pogingen.

Elementen

Het retry beleid kan andere beleidsregels als onderliggende elementen bevatten.

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. Omdat first-fast-retry is ingesteld op false, worden alle nieuwe pogingen onderworpen aan exponentieel toenemende wachttijden voor nieuwe pogingen (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 bij initiële aanvraagfout

In het volgende voorbeeld wordt het verzenden van een aanvraag naar een andere URL dan de gedefinieerde back-end maximaal drie keer opnieuw geprobeerd als de verbinding wordt verbroken of er een time-out optreedt, of als de aanvraag resulteert in een fout aan de serverzijde. Omdat first-fast-retry is ingesteld op true, wordt de eerste nieuwe poging uitgevoerd onmiddellijk na de eerste aanvraagfout. Houd er rekening mee dat send-request moet worden ingesteld ignore-error op true response-variable-name om null te 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>

Volgende stappen

Zie voor meer informatie over het werken met beleid: