Freigeben über


Erneut versuchen

GILT FÜR: Alle API Management-Ebenen

Die retry-Richtlinie führt ihre untergeordneten Richtlinien einmal aus und versucht dann, die Ausführung zu wiederholen, bis condition für die Wiederholung false wird oder der Wert count für die Wiederholung ausgeschöpft ist.

Hinweis

Legen Sie die Elemente und untergeordneten Elemente einer Richtlinie in der Reihenfolge fest, die in der Richtlinienanweisung angegeben ist. Erfahren Sie mehr darüber, wie Sie API Management-Richtlinien festlegen oder bearbeiten.

Richtlinienanweisung

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

Attribute

Attribut BESCHREIBUNG Erforderlich Standard
condition Boolesch. Gibt an, ob Wiederholungsversuche beendet (false) oder fortgesetzt werden sollen (true). Richtlinienausdrücke sind zulässig. Ja
count Eine positive Zahl zwischen 1 und 50, welche die Anzahl der Wiederholungen angibt, die versucht werden sollen. Richtlinienausdrücke sind zulässig. Ja
interval Ein positiver Wert in Sekunden, mit dem das Warteintervall zwischen den Wiederholungsversuchen angegeben wird. Richtlinienausdrücke sind zulässig. Ja
max-interval Ein positiver Wert in Sekunden, mit dem das maximale Warteintervall zwischen den Wiederholungsversuchen angegeben wird. Wird zum Implementieren eines exponentiellen Wiederholungsalgorithmus verwendet. Richtlinienausdrücke sind zulässig. Nein
delta Ein positiver Wert in Sekunden, mit dem das Inkrement für das Warteintervall angegeben wird. Wird zum Implementieren der linearen und exponentiellen Wiederholungsalgorithmen verwendet. Richtlinienausdrücke sind zulässig. Nein
first-fast-retry Boolesch. Wenn true festgelegt ist, wird der erste Wiederholungsversuch sofort durchgeführt. Richtlinienausdrücke sind zulässig. Nein false

Wiederholungswartezeiten

  • Wenn nur interval angegeben ist, werden Wiederholungsversuche nach interval Intervallen durchgeführt.

  • Wenn nur interval und delta angegeben werden, wird ein linearer Intervallwiederholungsalgorithmus verwendet. Die Wartezeit zwischen Wiederholungsversuchen erhöht sich entsprechend folgender Formel: interval + (count - 1)*delta.

  • Wenn interval, max-interval und delta angegeben werden, wird ein exponentieller Intervallwiederholungsalgorithmus angewendet. Die Wartezeit zwischen den Wiederholungsversuchen erhöht sich exponentiell gemäß folgender Formel: interval + (2^(count - 1)) * random(delta * 0.8, delta * 1.2), bis zu einem durch max-interval festgelegten maximalen Intervall.

    Wenn z. B. interval und delta beide auf 10 Sekunden eingestellt sind und max-interval 100 Sekunden beträgt, erhöht sich die ungefähre Wartezeit zwischen den Wiederholungsversuchen wie folgt: 10 Sekunden, 20 Sekunden, 40 Sekunden, 80 Sekunden, wobei 100 Sekunden Wartezeit für die verbleibenden Wiederholungsversuche verwendet werden.

Elemente

Die retry-Richtlinie kann beliebige andere Richtlinien als untergeordnete Elemente enthalten.

Verwendung

Beispiele

Anforderungsweiterleitung mit exponentiellen Wiederholungsversuchen

Im folgenden Beispiel wird mit einem exponentiellen Wiederholungsalgorithmus bis zu zehnmal versucht, die Anforderungsweiterleitung zu wiederholen. Da first-fast-retry auf false festgelegt ist, wird bei allen Wiederholungsversuchen die Wiederholungswartezeit exponentiell erhöht (in diesem Beispiel etwa 10 Sekunden, 20 Sekunden, 40 Sekunden usw.). Die maximale Wartezeit wird durch max-interval festgelegt.

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

Senden einer Anforderung nach einem Fehler bei der ursprünglichen Anforderung

Im folgenden Beispiel wird das Senden einer Anforderung an eine andere URL als die des festgelegten Back-Ends bis zu drei Mal wiederholt, wenn die Verbindung getrennt wird bzw. ein Timeout auftritt oder die Anforderung zu einem serverseitigen Fehler führt. Da first-fast-retry auf „true“ festgelegt ist, wird die erste Wiederholung sofort nach dem anfänglichen Anforderungsfehler ausgeführt. Beachten Sie, dass ignore-error unter send-request auf „true“ festgelegt werden muss, damit response-variable-name im Falle eines Fehlers null ist.


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

Weitere Informationen zum Arbeiten mit Richtlinien finden Sie hier: