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. |
Sì | N/D |
numero | Numero positivo compreso tra 1 e 50 che specifica il numero di tentativi da tentare. Le espressioni di criteri sono consentite. | Sì | N/D |
interval | Numero positivo in secondi che specifica l'intervallo di attesa tra i tentativi di ripetizione. Le espressioni di criteri sono consentite. | Sì | 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
edelta
, 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
.interval
Quando si specifica ,max-interval
edelta
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 damax-interval
.Ad esempio, quando
interval
edelta
sono entrambi impostati su 10 secondi emax-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
- Sezioni del criterio: inbound, outbound, backend, on-error
- Ambiti del criterio: globale, area di lavoro, prodotto, API, operazione
- Gateway: classico, v2, consumo, self-hosted
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>
Criteri correlati
Contenuto correlato
Per ulteriori informazioni sull'utilizzo dei criteri, vedere:
- Esercitazione: Trasformare e proteggere l'API
- Informazioni di riferimento sui criteri per un elenco completo delle istruzioni dei criteri e delle relative impostazioni
- Espressioni di criteri
- Impostare o modificare criteri
- Riutilizzare le configurazioni dei criteri
- Repository dei frammenti di criteri
- Creare criteri con Microsoft Copilot per Azure