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:
-
RetryMode
especifica um dos três modos de repetição, definidos no Amazon.Runtime. RequestRetryModeenumeração.O valor padrão do seu aplicativo pode ser controlado usando a variável de ambiente
AWS_RETRY_MODE
ou a configuração retry_mode no arquivo de configuração compartilhado da AWS.
-
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 paraMaxErrorRetry
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 paraMaxErrorRetry
é 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 paraMaxErrorRetry
é 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 HttpWebRequestTimeout
é 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 HttpClientHttpWebRequest
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.
-
Timeout
eReadWriteTimeout
são definidos com os valores máximos se o método que está sendo chamado fizer upload de um stream, como AmazonS3Client. PutObjectAsync(), cliente Amazon S3. UploadPartAsync(), AmazonGlacierClient. UploadArchiveAsync() e assim por diante. -
As versões do AWS SDK for .NET conjunto do.NET Framework têm como alvo os valores máximos
ReadWriteTimeout
para todos os objetosTimeout
e clientes do AmazonS3. AmazonGlacierClient -
As versões do AWS SDK for .NET que têm como alvo a biblioteca de classes portátil (PCL) e o.NET Core são definidas como o valor máximo
Timeout
para todos os objetos e clientes do AmazonS3. AmazonGlacierClient
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 });