Condividi tramite


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.

I retry criteri possono contenere altri criteri come elementi figlio, ad eccezione dei wait criteri.

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
intervallo Numero positivo in secondi che specifica l'intervallo di attesa tra i tentativi di ripetizione. Le espressioni di criteri sono consentite. N/D
intervallo massimo 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 retry criteri possono contenere altri criteri come elementi figlio, ad eccezione dei wait criteri.

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: