Novas tentativas e tempos limite - AWS SDK for .NET

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

Novas tentativas e tempos limite

O AWS SDK for .NET permite que você configure os valores do número de tentativas e do tempo limite para solicitações HTTP de serviços da AWS. Se os valores padrão para novas tentativas e tempos limite não forem apropriados, ajuste-os conforme os seus requisitos específicos, mas é importante entender como essa ação afetará o comportamento do aplicativo.

Para determinar quais valores usar para tentativas e tempos limite, considere o seguinte:

  • Como o AWS SDK for .NET e o seu aplicativo devem responder quando a qualidade da conexão com a rede piorar ou quando um serviço da AWS não estiver acessível? Deseja que a chamada falhe rapidamente, ou é apropriado que a chamada continue tentando em seu nome?

  • O seu aplicativo é um aplicativo ou site voltado para o usuário e que deve ser responsivo, ou ele é um trabalho de processamento em segundo plano com maior tolerância a latências?

  • O aplicativo é implantado em uma rede confiável com baixa latência ou é implantado em um local remoto com conectividade incerta?

Repetições

Visão geral

O AWS SDK for .NET pode realizar novas tentativas para as solicitações que falharem devido ao controle de utilização no lado do servidor ou conexões perdidas. Há duas propriedades das classes de configuração de serviço que você pode usar para especificar o comportamento de novas tentativas de um cliente de serviço. As classes de configuração de serviço herdam essas propriedades do abstrato Amazon.Runtime. ClientConfigclasse da referência da AWS SDK for .NET API:

  • MaxErrorRetry especifica o número de novas tentativas permitidas no nível do cliente de serviço; o SDK executa novas tentativas da operação pelo número especificado de vezes antes de causar uma falha e gerar uma exceção.

    O valor padrão do seu aplicativo pode ser controlado usando a variável de ambiente AWS_MAX_ATTEMPTS ou a configuração max_attempts no arquivo de configuração compartilhado da AWS.

As descrições detalhadas dessas propriedades podem ser encontradas no resumo Amazon.Runtime. ClientConfigclasse da Referência da AWS SDK for .NET API. Cada valor de RetryMode corresponde, por padrão, a um valor específico de MaxErrorRetry, conforme mostrado na tabela a seguir.

RetryMode Corresponding MaxErrorRetry (Amazon DynamoDB) Corresponding MaxErrorRetry (all others)
Legacy 10 4
Standard 10 2
Adaptive (experimental) 10 2

Comportamento

Quando seu aplicativo é iniciado

Quando seu aplicativo é iniciado, os valores padrão para RetryMode e MaxErrorRetry são configurados pelo SDK. Esses valores padrão são usados quando você cria um cliente de serviço, a menos que você especifique outros valores.

  • Se as propriedades não estiverem definidas em seu ambiente, o padrão para RetryMode será configurado como Legacy e o padrão para MaxErrorRetry será configurado com o valor correspondente da tabela anterior.

  • Se o modo de novas tentativas tiver sido definido em seu ambiente, esse valor será usado como padrão para RetryMode. O padrão para MaxErrorRetry é configurado com o valor correspondente da tabela anterior, a menos que o valor para o máximo de erros também tenha sido definido em seu ambiente (descrito a seguir).

  • Se o valor para o máximo de erros tiver sido definido em seu ambiente, esse valor será usado como padrão para MaxErrorRetry. O Amazon DynamoDB é a exceção a essa regra; o valor padrão do DynamoDB para MaxErrorRetry é sempre o valor da tabela anterior.

À medida que seu aplicativo é executado

Ao criar um cliente de serviço, você pode usar os valores padrão para RetryMode e MaxErrorRetry, conforme descrito anteriormente, ou pode especificar outros valores. Para especificar outros valores, crie e inclua um objeto de configuração do serviço, como AmazonDynamodbConfig ou AmazonSQSConfig, ao criar o cliente do serviço.

Não é possível alterar os valores de um cliente de serviço depois que ele tiver sido criado.

Considerações

Quando ocorre uma nova tentativa, a latência da solicitação é aumentada. Configure as tentativas com base nos limites de latência total da solicitação e taxas de erros do aplicativo.

Tempos limite

O AWS SDK for .NET permite que você configure os valores do tempo limite da solicitação e o tempo limite de leitura/gravação do soquete no nível do cliente do serviço. Esses valores são especificados nas Timeout ReadWriteTimeout propriedades abstratas do Amazon.Runtime. ClientConfigclasse. Esses valores são transmitidos como ReadWriteTimeout propriedades Timeout e dos HttpWebRequestobjetos criados pelo objeto cliente AWS de serviço. Por padrão, o valor Timeout é 100 segundos e o valor ReadWriteTimeout é 300 segundos.

Quando a sua rede estiver com latência alta, ou existirem condições que gerem uma nova tentativa para uma operação, utilizar valores de tempo limite longos e um alto número de tentativas pode fazer com que algumas operações do SDK pareçam indiferentes.

nota

A versão do AWS SDK for .NET que tem como alvo a biblioteca de classes portátil (PCL) usa a HttpClientclasse em vez da HttpWebRequest classe e oferece suporte somente à propriedade Timeout.

Veja a seguir as exceções aos valores de tempo limite padrão. Estes valores são substituídos ao definir explicitamente os valores de tempo limite.

Exemplo

O exemplo a seguir mostra como especificar o modo de novas tentativas padrão, um máximo de três tentativas, um tempo limite de 10 segundos e um tempo limite de leitura/gravação de 10 segundos (se aplicável). O construtor AmazonS3Client recebe um objeto AmazonS3Config.

var s3Client = new AmazonS3Client( new AmazonS3Config { Timeout = TimeSpan.FromSeconds(10), // NOTE: The following property is obsolete for // versions of the AWS SDK for .NET that target .NET Core. ReadWriteTimeout = TimeSpan.FromSeconds(10), RetryMode = RequestRetryMode.Standard, MaxErrorRetry = 3 });