Ismét

A KÖVETKEZŐRE VONATKOZIK: Minden API Management-szint

A retry házirend egyszer végrehajtja a gyermekházirendeket, majd újrapróbálkozza a végrehajtást, amíg az újrapróbálkozás conditionfalse ki nem merül, vagy újrapróbálkoznak count .

A retry szabályzat gyermekelemként bármilyen más szabályzatot tartalmazhat, kivéve a szabályzatot wait .

Feljegyzés

Állítsa be a szabályzat elemeit és gyermekelemeit a szabályzatutasításban megadott sorrendben. További információ az API Management-szabályzatok beállításáról és szerkesztéséről.

Szabályzatutasítás

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

Attribútumok

Attribútum Leírás Kötelező Alapértelmezett
feltétel Logikai. Megadja, hogy az újrapróbálkozások leállítása (false) vagy folytatása (true). A szabályzatkifejezések engedélyezettek. Igen n/a
darabszám Egy 1 és 50 közötti pozitív szám, amely megadja a megkísérlendő újrapróbálkozási kísérletek számát. A szabályzatkifejezések engedélyezettek. Igen n/a
intervallum Az újrapróbálkozási kísérletek közötti várakozási időközt megadva pozitív szám másodpercben. A szabályzatkifejezések engedélyezettek. Igen n/a
maximális időköz Pozitív szám másodpercben, amely megadja az újrapróbálkozási kísérletek közötti maximális várakozási időközt. Exponenciális újrapróbálkozási algoritmus implementálásához használatos. A szabályzatkifejezések engedélyezettek. Nem n/a
delta A várakozási időköz növekményét meghatározó pozitív szám másodpercben. A lineáris és exponenciális újrapróbálkozási algoritmusok implementálásához használatos. A szabályzatkifejezések engedélyezettek. Nem n/a
első gyors újrapróbálkozás Logikai. Ha be van trueállítva, a rendszer azonnal végrehajtja az első újrapróbálkozási kísérletet. A szabályzatkifejezések engedélyezettek. Nem false

Várakozási idő újrapróbálkozás

  • Ha csak a interval megadott érték van megadva, rögzített időközönkénti újrapróbálkozási műveletek lesznek végrehajtva.

  • Ha csak a megadott és interval azokat delta adja meg, a rendszer lineáris intervallum-újrapróbálkozási algoritmust használ. Az újrapróbálkozések közötti várakozási idő a következő képlet szerint nő: interval + (count - 1)*delta.

  • intervalA megadott max-interval és delta exponenciális intervallum-újrapróbálkozási algoritmus alkalmazásakor a rendszer egy exponenciális intervallum-újrapróbálkozási algoritmust alkalmaz. Az újrapróbálkozási műveletek közötti várakozási idő exponenciálisan nő a következő képlet szerint: interval + (2^(count - 1)) * random(delta * 0.8, delta * 1.2), legfeljebb a megadott maximális időközig max-interval.

    Ha például intervaldelta mindkettő 10 másodpercre van állítva, és max-interval 100 másodperc, az újrapróbálkozások közötti hozzávetőleges várakozási idő a következőképpen nő: 10 másodperc, 20 másodperc, 40 másodperc, 80 másodperc, és a fennmaradó újrapróbálkozásokhoz 100 másodperc várakozási idő szükséges.

Elemek

A retry szabályzat gyermekelemként bármilyen más szabályzatot tartalmazhat, kivéve a szabályzatot wait .

Használat

Használati megjegyzések

  • A házirend végrehajtja a gyermekházirendeket a retry blokkban, mielőtt kiértékeli az condition első újrapróbálkozási kísérlet végrehajtását.

Példák

Kérelemtovábbítás exponenciális újrapróbálkozással

Az alábbi példában a kéréstovábbítást egy exponenciális újrapróbálkozási algoritmus használatával akár tízszer is újrapróbálkozza a rendszer. Mivel first-fast-retry a beállítás értéke false, az újrapróbálkozási kísérletek száma exponenciálisan növekszik (ebben a példában körülbelül 10 másodperc, 20 másodperc, 40 másodperc, ...), legfeljebb egy maximális várakozási max-intervalidőig.

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

Kérés küldése kezdeti kérelemhiba esetén

Az alábbi példában a rendszer a megadott háttérrendszeren kívüli URL-címre küld egy kérést legfeljebb háromszor, ha a kapcsolat megszakad/időtúllépést okoz, vagy a kérés kiszolgálóoldali hibát eredményez. Mivel first-fast-retry igaz értékre van állítva, az első újrapróbálkozást a rendszer azonnal végrehajtja a kezdeti kéréshiba után. Vegye figyelembe, hogy send-request hiba esetén a null értékhez igaz ignore-error értéket kell beállítaniaresponse-variable-name.


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

Háttérrendszer váltása hiba esetén

Az alábbi példában a kezdeti kérés az elsődleges háttérrendszerbe lesz elküldve. 429 Too Many Requests Válaszállapot-kód visszaadása esetén a rendszer azonnal újrapróbálkozza a kérést, és továbbítja a másodlagos háttérrendszernek.

<backend>
    <retry
        condition="@(context.Response != null && context.Response.StatusCode == 429)"
        count="1"
        interval="1"
        first-fast-retry="true">
           <set-variable name="attempt-count" value="@(context.Variables.GetValueOrDefault<int>("attempt-count", 0)+1)" />
           <set-backend-service backend-id="@(context.Variables.GetValueOrDefault<int>("attempt-count") < 2 ? "primary-backend" : "secondary-backend" )" />
           <forward-request />
    </retry>
</backend>

Jótanács

Alternatív megoldásként konfigurálhat egy háttérerőforrást áramkör-megszakító szabályokkal a hibaállapotok észleléséhez, valamint egy elosztott terhelésű készletet, amely a kéréseket több háttérrendszer között osztja el.

A szabályzatok használatával kapcsolatos további információkért lásd: