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
endelta
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
interval
enmax-interval
delta
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 doormax-interval
.Wanneer
interval
endelta
bijvoorbeeld zijn ingesteld op 10 seconden enmax-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
- Beleidssecties: inkomend, uitgaand, back-end, on-error
- Beleidsbereiken: globaal, product, API, bewerking
- Gateways: toegewezen, verbruik, zelf-hostend
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>
Gerelateerde beleidsregels
- API Management advanced policies (Geavanceerde beleidsregels API Management)
Volgende stappen
Zie voor meer informatie over het werken met beleid:
- Zelfstudie: Uw API transformeren en beveiligen
- Beleidsreferentie voor een volledige lijst met beleidsinstructies en hun instellingen
- Beleidsexpressies
- Beleid instellen of bewerken
- Beleidsconfiguraties opnieuw gebruiken
- Voorbeelden van beleid