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. |
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 tra le ripetizioni
Se è specificato solo
interval
, vengono eseguiti tentativi a intervallo fisso.Quando vengono specificati solo
interval
edelta
, 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
edelta
, 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 damax-interval
.Ad esempio, quando
interval
edelta
sono entrambi impostati su 10 secondi emax-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
- Sezioni del criterio: inbound, outbound, backend, on-error
- Ambiti del criterio: globale, area di lavoro, prodotto, API, operazione
- Gateway: classico, v2, consumo, self-hosted, area di lavoro
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>
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 usando Microsoft Copilot in Azure