Tentativa
Este capítulo apresenta o mecanismo de tentativa das solicitações Go Resty.
O Resty usa o backoff para aumentar o intervalo de tentativa após cada tentativa.
Exemplo de uso:
// Crie um cliente Resty
client := resty.New()
// A configuração de contagem de tentativas está em cada cliente
client.
// Defina uma contagem de tentativas não nula para habilitar as retentativas
SetRetryCount(3).
// Você pode personalizar o tempo de espera de tentativa inicial.
// O padrão é 100 milissegundos.
SetRetryWaitTime(5 * time.Second).
// MaxWaitTime também pode ser substituído.
// O padrão é 2 segundos.
SetRetryMaxWaitTime(20 * time.Second).
// Defina RetryAfter para calcular a função de retorno de chamada para o tempo de espera entre as tentativas.
// O valor padrão (nil) significa usar um tempo de espera exponencialmente aumentado e agitação.
SetRetryAfter(func(client *resty.Client, resp *resty.Response) (time.Duration, error) {
return 0, errors.New("Cota excedida")
})
Por padrão, o resty tentará novamente as solicitações que retornem erros não nulos durante a execução. Portanto, as configurações acima farão com que o resty tente novamente as solicitações que retornem erros não nulos, aumentando o atraso após cada tentativa, até um máximo de 3 tentativas.
Você também pode fornecer condições de tentativa personalizadas para o cliente:
// Crie um cliente Resty
client := resty.New()
client.AddRetryCondition(
// O tipo RetryConditionFunc é usado para funções de condição de tentativa
// Entrada: Resposta não nula OU erro de execução da solicitação
func(r *resty.Response, err error) bool {
return r.StatusCode() == http.StatusTooManyRequests
},
)
O exemplo acima fará com que o resty tente novamente as solicitações que terminem com o código de status 429 Too Many Requests
. É importante observar que, ao especificar condições usando AddRetryCondition
, ele substituirá o comportamento de tentativa padrão, que é tentar novamente ao encontrar erros durante o processo de solicitação. Se desejar tentar novamente como comportamento padrão ao encontrar erros durante o processo de solicitação, é necessário configurar da seguinte forma:
// Crie um cliente Resty
client := resty.New()
client.AddRetryCondition(
func(r *resty.Response, err error) bool {
// Inclua "err != nil" para simular o comportamento de tentativa padrão ao encontrar erros durante o processo de solicitação.
return err != nil || r.StatusCode() == http.StatusTooManyRequests
},
)
Várias condições de tentativa podem ser adicionadas. É importante observar que, se forem especificadas várias condições, contanto que qualquer uma das condições seja atendida, uma tentativa será realizada.
Também é possível usar resty.Backoff(...)
para implementar cenários de tentativa arbitrários.