Dela via


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

  • intervalNär , max-interval och delta 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 av max-interval.

    Till exempel, när interval och delta båda är inställda på 10 sekunder och max-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

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

Mer information om hur du arbetar med principer finns i: