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 del criterio. Altre informazioni su come impostare o modificare i criteri di API Management.

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 tra le ripetizioni

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

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

  • Quando vengono specificati interval, max-interval e delta, viene applicato un algoritmo di ripetizione dei tentativi con intervallo esponenziale. Il tempo di attesa tra le ripetizioni 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 è 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 criteri retry possono contenere qualsiasi altro criterio come elementi figlio.

Utilizzo

Esempi

Inoltro di 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 ad un aumento esponenziale dei tempi di attesa dei tentativi (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 ripetuto fino a tre volte se la connessione scade o si interrompe oppure se la richiesta restituisce un errore sul lato server. Poiché first-fast-retry è impostato su true, il primo tentativo viene eseguito subito dopo l'errore iniziale della richiesta. Si noti che send-request deve essere impostato ignore-error su true affinché response-variable-name sia 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: