Riprova

SI APPLICA A: Tutti i livelli di Gestione API

Il criterio retry esegue i criteri figlio una volta e quindi ritenta l'esecuzione degli stessi fino a quando il tentativo condition diventa false o fino a esaurimento del tentativo count.

Nota

Impostare gli elementi e gli elementi figlio del criterio nell'ordine specificato nell'istruzione dei criteri. Altre informazioni su come impostare o modificare i criteri di Gestione API.

Istruzione del criterio

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

Attributi

Attributo Descrizione Richiesto Valore predefinito
condizione Booleano. Specifica se i tentativi devono essere arrestati (false) o continui (true). Le espressioni di criteri sono consentite. N/D
numero Numero positivo compreso tra 1 e 50 che specifica il numero di tentativi da tentare. Le espressioni di criteri sono consentite. N/D
interval Numero positivo in secondi che specifica l'intervallo di attesa tra i tentativi di ripetizione. Le espressioni di criteri sono consentite. N/D
max-interval Un numero positivo che specifica l'intervallo di attesa massimo tra i tentativi di ripetizione. Viene usato per implementare un algoritmo di ripetizione esponenziale. Le espressioni di criteri sono consentite. No N/D
delta Numero positivo in secondi che specifica l'incremento dell'intervallo di attesa. Viene usato per implementare gli algoritmi di ripetizione lineari ed esponenziali. Le espressioni di criteri sono consentite. No N/D
first-fast-retry Booleano. Se impostato su true, il primo tentativo di ripetizione viene eseguito immediatamente. Le espressioni di criteri sono consentite. No false

Tempi di attesa dei tentativi

  • Se è specificato solo interval, vengono eseguiti tentativi a intervallo fisso.

  • Quando viene specificato solo interval e delta , viene usato un algoritmo di ripetizione dei tentativi di intervallo lineare . Il tempo di attesa tra i tentativi aumenta in base alla formula seguente: interval + (count - 1)*delta.

  • intervalQuando si specifica , max-interval e delta viene applicato un algoritmo di ripetizione intervallo esponenziale. Il tempo di attesa tra i tentativi aumenta in modo esponenziale in base alla formula seguente: interval + (2^count - 1) * random(delta * 0.8, delta * 1.2), fino a un intervallo massimo impostato da max-interval.

    Ad esempio, quando interval e delta sono entrambi impostati su 10 secondi e max-interval sono 100 secondi, il tempo di attesa approssimativo tra i tentativi aumenta come segue: 10 secondi, 20 secondi, 40 secondi, 80 secondi, con tempo di attesa di 100 secondi usato per i tentativi rimanenti.

Elementi

I retry criteri possono contenere altri criteri come elementi figlio.

Utilizzo

Esempi

Inoltrare richieste con tentativi esponenziali

Nella richiesta di esempio seguente l'inoltro viene ripetuto fino a dieci volte usando un algoritmo di ripetizione esponenziale. Poiché first-fast-retry è impostato su false, tutti i tentativi di ripetizione sono soggetti a tempi di attesa dei tentativi in modo esponenziale (in questo esempio, circa 10 secondi, 20 secondi, 40 secondi, ...), fino a un massimo di attesa di 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>

Inviare una richiesta in caso di errore iniziale della richiesta

Nell'esempio seguente, l'invio di una richiesta a un URL diverso dal back-end definito viene ritentato fino a tre volte se la connessione viene eliminata/scaduta oppure la richiesta genera un errore sul lato server. Poiché first-fast-retry è impostato su true, il primo tentativo viene eseguito immediatamente dopo l'errore iniziale della richiesta. Si noti che send-request deve essere impostato su ignore-error true per response-variable-name essere null in caso di errore.


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

Per ulteriori informazioni sull'utilizzo dei criteri, vedere: