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 nachinterval
Intervallen durchgeführt.Wenn nur
interval
unddelta
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
unddelta
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 durchmax-interval
festgelegten maximalen Intervall.Wenn z. B.
interval
unddelta
beide auf 10 Sekunden eingestellt sind undmax-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
- Richtlinienabschnitte: inbound, outbound, backend, on-error
- Richtlinienbereiche: global, Arbeitsbereich, Produkt, API, Vorgang
- Gateways: klassisch, v2, Verbrauch, selbstgehostet, Arbeitsbereich
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>
Verwandte Richtlinien
Zugehöriger Inhalt
Weitere Informationen zum Arbeiten mit Richtlinien finden Sie hier:
- Tutorial: Transformieren und Schützen Ihrer API
- Unter Richtlinien für die API-Verwaltung finden Sie eine komplette Liste der Richtlinienanweisungen und der zugehörigen Einstellungen.
- Richtlinienausdrücke
- Festlegen oder Bearbeiten von Richtlinien
- Wiederverwenden von Richtlinienkonfigurationen
- Repository für Richtliniencodeausschnitte
- Erstellen von Richtlinien mit Microsoft Copilot in Azure