Réessayer

S’APPLIQUE À : Tous les niveaux de Gestion des API

La stratégie retry exécute ses stratégies enfants une fois, puis retente leur exécution jusqu’à ce que la condition de la nouvelle tentative devienne false ou que le count de nouvelles tentatives soit épuisé.

Notes

Définissez les éléments enfants et de stratégie dans l’ordre fourni dans l’instruction de stratégie. En savoir plus sur comment définir ou modifier des stratégies du service Gestion des API.

Instruction de la stratégie

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

Attributs

Attribut Description Obligatoire Default
condition Propriété booléenne. Spécifie si les nouvelles tentatives doivent être arrêtées (false) ou poursuivies (true). Les expressions de stratégie sont autorisées. Oui N/A
count Nombre positif compris entre 1 et 50 spécifiant le nombre de nouvelles tentatives à tenter. Les expressions de stratégie sont autorisées. Oui N/A
interval Nombre positif en secondes spécifiant le délai d’attente entre les tentatives. Les expressions de stratégie sont autorisées. Oui N/A
max-interval Nombre positif en secondes spécifiant le délai d’attente maximal entre les tentatives. Il est utilisé pour implémenter un algorithme de nouvelles tentatives exponentiel. Les expressions de stratégie sont autorisées. Non N/A
delta Nombre positif en secondes spécifiant l’incrément du délai d’attente. Il est utilisé pour implémenter les algorithmes de nouvelles tentatives linéaires et exponentiels. Les expressions de stratégie sont autorisées. Non N/A
first-fast-retry Propriété booléenne. S’il a la valeur true, la première des nouvelles tentatives est effectuée immédiatement. Les expressions de stratégie sont autorisées. Non false

Temps d’attente des nouvelles tentatives

  • Lorsque seul interval est spécifié, les nouvelles tentatives sont effectuées à intervalles interval.

  • Lorsque seuls interval et delta sont spécifiés, un algorithme de relance par intervalle linéaire est utilisé. Le temps d’attente entre les nouvelles tentatives augmente selon la formule suivante : interval + (count - 1)*delta

  • Lorsque interval, max-interval et delta sont spécifiés, un algorithme de nouvelle tentative par intervalle exponentiel est appliqué. Le temps d’attente entre les nouvelles tentatives augmente de façon exponentielle en fonction de la formule suivante : interval + (2^count - 1) * random(delta * 0.8, delta * 1.2), jusqu’à un intervalle maximal défini par max-interval.

    Par exemple, quand interval et delta sont tous les deux définis sur 10 secondes et max-interval est de 100 secondes, le temps d’attente approximatif entre les nouvelles tentatives augmente comme suit : 10 secondes, 20 secondes, 40 secondes, 80 secondes, avec 100 secondes d’attente utilisée pour les nouvelles tentatives restantes.

Éléments

La stratégie retry peut contenir n’importe quelle autre stratégie sous forme d’élément enfant.

Utilisation

Exemples

Transfert de demande avec nouvelle tentative exponentielle

Dans l’exemple suivant, le transfert de la demande est retenté jusqu’à dix fois suivant un algorithme de nouvelles tentatives exponentiel. Étant donné que first-fast-retry est false, toutes les tentatives de nouvelle tentative sont soumises à une augmentation exponentielle des temps d’attente des nouvelles tentatives (dans cet exemple, environ 10 secondes, 20 secondes, 40 secondes, ...), jusqu’à une attente maximale de 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>

Envoyer la demande en cas d’échec de la demande initiale

Dans l’exemple suivant, l’envoi d’une requête à une URL autre que le back-end défini est retenté jusqu’à trois fois si la connexion expire/est supprimée ou si la requête entraîne une erreur côté serveur. first-fast-retry ayant la valeur true, la première nouvelle tentative est exécutée immédiatement lors de l’échec de la requête initiale. Notez que send-request doit affecter la valeur true à ignore-error pour que response-variable-name soit Null en cas d’erreur.


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

Pour plus d’informations sur l’utilisation des stratégies, consultez :