As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Configurar novas tentativas no AWS SDK para Rust
O AWS SDK para Rust fornece um comportamento de novas tentativas padrão para solicitações de serviço e opções de configuração personalizáveis. Chamadas para Serviços da AWS ocasionalmente retornam exceções inesperadas. Determinados tipos de erros, como erros transitórios ou de controle de utilização, podem ser bem-sucedidos se a chamada for repetida.
O comportamento de novas tentativas pode ser configurado globalmente usando variáveis de ambiente ou configurações no arquivo compartilhado config da AWS. Para obter mais informações sobre esta abordagem, consulte Comportamento de novas tentativas no Guia de referência de ferramentas e SDKs da AWS. Ele também inclui informações detalhadas sobre implementações de estratégias de novas tentativas e como escolher uma em vez da outra.
Como alternativa, essas opções também podem ser configuradas no código, conforme mostrado nas seções a seguir.
Configuração padrão de novas tentativas
Cada cliente de serviço usa por padrão a configuração de estratégia de novas tentativas standard fornecida pela estrutura RetryConfig
Somente alguns tipos de erros são considerados para novas tentativas pelos SDKs. Exemplos de erros que podem ser repetidos são:
-
tempos limite de soquetes
-
controle de utilização do lado do serviço
-
erros de serviço transitórios, como respostas HTTP 5XX
Os exemplos a seguir não podem ser repetidos:
-
Parâmetros ausentes ou inválidos
-
erros de autenticação/segurança
-
exceções de configuração incorreta
É possível personalizar a estratégia standard de novas tentativas definindo o máximo de tentativas, atrasos e configuração de recuo.
Máximo de tentativas
Você pode personalizar o máximo de tentativas em seu código fornecendo uma modificação RetryConfigaws_config::defaults:
const CUSTOM_MAX_ATTEMPTS: u32 = 5; let retry_config = RetryConfig::standard() // Set max attempts. When max_attempts is 1, there are no retries. // This value MUST be greater than zero. // Defaults to 3. .with_max_attempts(CUSTOM_MAX_ATTEMPTS); let config = aws_config::defaults(BehaviorVersion::latest()) .retry_config(retry_config) .load() .await;
Atrasos e recuo
Se uma nova tentativa for necessária, a estratégia de nova tentativa padrão aguarda antes de fazer a tentativa subsequente. O atraso na primeira tentativa é pequeno, mas cresce exponencialmente nas tentativas posteriores. A quantidade máxima de atraso é limitada para não aumentar muito.
A instabilidade aleatória é aplicada aos atrasos em todas as tentativas. A instabilidade ajuda a mitigar o efeito de grandes frotas que podem causar tempestades de novas tentativas. Para uma discussão mais aprofundada sobre recuo exponencial e instabilidade, consulte Exponential Backoff And Jitter
Você pode personalizar as configurações de atraso em seu código fornecendo um RetryConfigaws_config::defaults. O código a seguir define a configuração para atrasar a primeira nova tentativa em até 100 milissegundos e definir que o tempo máximo entre qualquer tentativa seja de 5 segundos.
let retry_config = RetryConfig::standard() // Defaults to 1 second. .with_initial_backoff(Duration::from_millis(100)) // Defaults to 20 seconds. .with_max_backoff(Duration::from_secs(5)); let config = aws_config::defaults(BehaviorVersion::latest()) .retry_config(retry_config) .load() .await;
Modo de nova tentativa adaptável
Como alternativa à estratégia de nova tentativa do modo standard, a estratégia de nova tentativa do modo adaptive é uma abordagem avançada que busca a taxa ideal de solicitações para minimizar os erros de controle de utilização.
nota
As novas tentativas adaptáveis são um modo de nova tentativa avançado. Normalmente é recomendável usar esta estratégia. Consulte Comportamento de repetição no Guia de referência de SDKs e ferramentas da AWS.
As novas tentativas adaptáveis incluem todos os recursos das novas tentativas padrão. Isso adiciona um limitador de taxa do lado do cliente que mede a taxa de solicitações de controle de utilização em comparação com solicitações sem o controle. Também limita o tráfego para tentar permanecer em uma largura de banda segura, o que, idealmente, não causa nenhum erro de controle de utilização.
A taxa se adapta em tempo real às mudanças nas condições de serviço e nos padrões de tráfego e pode aumentar ou diminuir a taxa de tráfego de acordo. Fundamentalmente, o limitador de taxa pode atrasar as tentativas iniciais em cenários de tráfego intenso.
Você pode selecionar a estratégia adaptive de novas tentativas no código fornecendo uma RetryConfig
let config = aws_config::defaults(BehaviorVersion::latest()) .retry_config(RetryConfig::adaptive()) .load() .await;