Försök igen
GÄLLER FÖR: Alla API Management-nivåer
Principen retry
kör sina underordnade principer en gång och försöker sedan köra dem igen tills återförsöket condition
blir false
eller omförsöket count
är uttömt.
Kommentar
Ange principens element och underordnade element i den ordning som anges i principbeskrivningen. Läs mer om hur du anger eller redigerar API Management-principer.
Principuttryck
<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>
Attribut
Attribut | beskrivning | Obligatoriskt | Standardvärde |
---|---|---|---|
villkor | Boolesk. Anger om återförsök ska stoppas (false ) eller fortsätta (true ). Principuttryck tillåts. |
Ja | Ej tillämpligt |
antal | Ett positivt tal mellan 1 och 50 som anger antalet återförsök att försöka. Principuttryck tillåts. | Ja | Ej tillämpligt |
interval | Ett positivt tal i sekunder som anger vänteintervallet mellan återförsöken. Principuttryck tillåts. | Ja | Ej tillämpligt |
maxintervall | Ett positivt tal i sekunder som anger det maximala vänteintervallet mellan återförsöken. Den används för att implementera en exponentiell återförsöksalgoritm. Principuttryck tillåts. | Nej | Ej tillämpligt |
delta | Ett positivt tal i sekunder som anger ökning av vänteintervall. Den används för att implementera algoritmerna för linjära och exponentiella återförsök. Principuttryck tillåts. | Nej | Ej tillämpligt |
first-fast-retry | Boolesk. Om värdet true är inställt på utförs det första återförsöket omedelbart. Principuttryck tillåts. |
Nej | false |
Återförsök av väntetider
När endast
interval
anges utförs återförsök med fast intervall.När endast
interval
ochdelta
anges används en algoritm för linjära intervallomförsök. Väntetiden mellan återförsöken ökar enligt följande formel:interval + (count - 1)*delta
.interval
När ,max-interval
ochdelta
anges, tillämpas en exponentiell intervallåterförsöksalgoritm. Väntetiden mellan återförsöken ökar exponentiellt enligt följande formel:interval + (2^(count - 1)) * random(delta * 0.8, delta * 1.2)
, upp till ett maximalt intervall som anges avmax-interval
.Till exempel, när
interval
ochdelta
båda är inställda på 10 sekunder ochmax-interval
är 100 sekunder, ökar den ungefärliga väntetiden mellan återförsök på följande sätt: 10 sekunder, 20 sekunder, 40 sekunder, 80 sekunder, med 100 sekunders väntetid som används för återstående återförsök.
Element
Principen retry
kan innehålla andra principer som underordnade element.
Användning
- Principavsnitt: inkommande, utgående, serverdel, on-error
- Principomfattningar: global, arbetsyta, produkt, API, åtgärd
- Gatewayer: klassisk, v2, förbrukning, lokalt installerad, arbetsyta
Exempel
Begära vidarebefordring med exponentiellt återförsök
I följande exempel görs vidarebefordring av begäran upp till tio gånger med hjälp av en exponentiell återförsöksalgoritm. Eftersom first-fast-retry
är inställt på false
kan alla återförsöksförsök utsättas för exponentiellt ökande väntetider för återförsök (i det här exemplet cirka 10 sekunder, 20 sekunder, 40 sekunder, ...), upp till en maximal väntetid på 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>
Skicka begäran vid första begärandefel
I följande exempel görs ett nytt försök att skicka en begäran till en annan URL än den definierade serverdelen upp till tre gånger om anslutningen avbryts/överskrids, eller om begäran resulterar i ett fel på serversidan. Eftersom first-fast-retry
är inställt på true körs det första återförsöket omedelbart efter det första begärandefelet. Observera att send-request
måste anges ignore-error
till sant för response-variable-name
att vara null i händelse av ett fel.
<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>
Relaterade principer
Relaterat innehåll
Mer information om hur du arbetar med principer finns i:
- Självstudie: Transformera och skydda ditt API
- Principreferens för en fullständig lista över principinstruktioner och deras inställningar
- Principuttryck
- Ange eller redigera principer
- Återanvända principkonfigurationer
- Lagringsplats för principfragment
- Skapa principer med Microsoft Copilot i Azure