Configurar tempos limite no AWS SDK para Rust - AWS SDK para Rust

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 tempos limite no AWS SDK para Rust

O AWS SDK para Rust fornece várias configurações para gerenciar tempos limite de solicitação em AWS service (Serviço da AWS) e fluxos de dados paralisados. Isso ajuda sua aplicação a se comportar de maneira ideal quando ocorrem atrasos e falhas inesperadas na rede.

Tempos limite da API

Quando há problemas transitórios que podem fazer com que as tentativas de solicitação demorem muito ou falhem completamente, é importante revisar e definir tempos limite a aplicação poder antecipar-se à falha rapidamente e se comportar de maneira ideal. Solicitações que falham podem ser automaticamente repetidas pelo SDK. Uma prática recomendada é definir tempos limite para as tentativas individuais e para toda a solicitação.

O SDK para Rust fornece um tempo limite padrão para estabelecer uma conexão para uma solicitação. O SDK não tem nenhum tempo de espera máximo padrão definido para receber uma resposta para uma tentativa de solicitação ou para toda a solicitação. As seguintes opções de tempo limite estão disponíveis:

Parameter Valor padrão Descrição
Tempo limite de conexão 3,1 segundos O tempo máximo de espera para estabelecer uma conexão antes de desistir.
Tempo limite de operação Nenhum O tempo máximo de espera antes de receber uma resposta do SDK para Rust, incluindo todas as novas tentativas.
Tempo limite de tentativa de operação Nenhum O tempo máximo de espera para uma única tentativa de HTTP, após o qual a chamada de API pode ser repetida.
Tempo limite de leitura Nenhum O tempo máximo de espera para ler o primeiro byte de uma resposta a partir do momento em que a solicitação é iniciada.

O seguinte exemplo exibe a configuração de um cliente do Amazon S3 com valores de tempo limite personalizados:

let config = aws_config::defaults(BehaviorVersion::latest()) .timeout_config( TimeoutConfig::builder() .operation_timeout(Duration::from_secs(5)) .operation_attempt_timeout(Duration::from_millis(1500)) .build() ) .load() .await; let s3 = aws_sdk_s3::Client::new(&config);

Ao usar os tempos limite de operação e tentativa juntos, você define um limite rígido para o tempo total gasto em todas as novas tentativas. Você também configura uma solicitação HTTP individual para se antecipar à falha rapidamente em uma solicitação lenta.

Como alternativa para definir esses valores de tempo limite no cliente de serviço para todas as operações, você pode configurar ou substituí-las por uma única solicitação.

Importante

Os tempos limite de operação e tentativa não se aplicam aos dados de streaming consumidos após o SDK para Rust ter retornado uma resposta. Por exemplo, o consumo de dados de um membro do ByteStream de uma resposta não está sujeito aos tempos limite de operação.

Proteção de fluxo paralisado

O SDK para Rust fornece outra forma de tempo limite relacionada à detecção de fluxos paralisados. Um fluxo paralisado é um fluxo de upload ou download que não produz dados por mais do que um período de carência configurado. Isso ajuda a evitar que as aplicações sejam interrompidas indefinidamente e nunca progridam.

A proteção de fluxo paralisado retornará um erro quando um fluxo ficar inativo por mais tempo do que o período aceitável.

Por padrão, o SDK para Rust habilita a proteção de fluxos paralisados para uploads e downloads e busca pelo menos 1 byte/seg de atividade com um generoso período de carência de 20 segundos.

O seguinte exemplo exibe um StalledStreamProtectionConfig personalizado que desabilita a proteção de upload e altera o período de carência para nenhuma atividade para 10 segundos:

let config = aws_config::defaults(BehaviorVersion::latest()) .stalled_stream_protection( StalledStreamProtectionConfig::enabled() .upload_enabled(false) .grace_period(Duration::from_secs(10)) .build() ) .load() .await;
Atenção

A proteção de fluxo paralisado é uma opção de configuração avançada. Recomendamos alterar esses valores somente se a aplicação precisar de um desempenho melhor ou se estiver causando algum outro problema.

Desabilitar a proteção de fluxo paralisado

O seguinte exemplo mostra como desabilitar completamente a proteção de fluxo parado:

let config = aws_config::defaults(BehaviorVersion::latest()) .stalled_stream_protection(StalledStreamProtectionConfig::disabled()) .load() .await;