Réessayer
Ce chapitre présente le mécanisme de réessai des requêtes Go Resty.
Resty utilise une atténuation exponentielle pour augmenter l'intervalle de réessai après chaque tentative.
Exemple d'utilisation :
// Créer un client Resty
client := resty.New()
// Configuration du nombre de réessais sur chaque client
client.
// Définir un nombre de réessais non nul pour activer les réessais
SetRetryCount(3).
// Vous pouvez personnaliser le temps d'attente initial pour les réessais.
// Par défaut, c'est 100 millisecondes.
SetRetryWaitTime(5 * time.Second).
// Le MaxWaitTime peut également être remplacé.
// Par défaut, c'est 2 secondes.
SetRetryMaxWaitTime(20 * time.Second).
// Définir RetryAfter pour calculer la fonction de rappel pour le temps d'attente entre les réessais.
// La valeur par défaut (nil) signifie utiliser un temps d'attente d'atténuation exponentielle et de jitter.
SetRetryAfter(func(client *resty.Client, resp *resty.Response) (time.Duration, error) {
return 0, errors.New("Quota dépassée")
})
Par défaut, resty réessaiera les requêtes qui renvoient des erreurs non nulles pendant l'exécution. Par conséquent, les paramètres ci-dessus feront que resty réessaiera les requêtes qui renvoient des erreurs non nulles tout en augmentant le délai après chaque tentative, jusqu'à un maximum de 3 réessais.
Vous pouvez également fournir des conditions de réessai personnalisées pour le client :
// Créer un client Resty
client := resty.New()
client.AddRetryCondition(
// Le type RetryConditionFunc est utilisé pour les fonctions de condition de réessai
// Entrée : réponse non nulle OU erreur d'exécution de la requête
func(r *resty.Response, err error) bool {
return r.StatusCode() == http.StatusTooManyRequests
},
)
L'exemple ci-dessus fera que resty réessayera les requêtes qui se terminent par le code d'état 429 Too Many Requests
. Il est important de noter que lorsque vous spécifiez des conditions en utilisant AddRetryCondition
, cela remplacera le comportement de réessai par défaut, qui consiste à réessayer en cas d'erreurs rencontrées lors du processus de la requête. Si vous souhaitez réessayer selon le comportement par défaut en cas d'erreurs lors du processus de la requête, vous devez le configurer comme suit :
// Créer un client Resty
client := resty.New()
client.AddRetryCondition(
func(r *resty.Response, err error) bool {
// Inclure "err != nil" pour simuler le comportement de réessai par défaut en cas d'erreurs lors du processus de la requête.
return err != nil || r.StatusCode() == http.StatusTooManyRequests
},
)
Plusieurs conditions de réessai peuvent être ajoutées. Il est important de noter que si plusieurs conditions sont spécifiées, dès que l'une quelconque des conditions est remplie, un réessai sera effectué.
Vous pouvez également utiliser resty.Backoff(...)
pour implémenter des scénarios de réessai arbitraires.