Controlar o comportamento de tempo limite da API de dados - Amazon Aurora

Controlar o comportamento de tempo limite da API de dados

Todas as chamadas para a API de dados são síncronas. Suponha que você realize uma operação da API de dados que execute uma instrução SQL, como INSERT ou CREATE TABLE. Se a chamada da API de dados for retornada com êxito, o processamento de SQL será concluído quando a chamada for retornada.

Por padrão, a API de dados cancelará uma operação e retornará um erro de tempo limite se o processamento da operação não for concluído em 45 segundos. Nesse caso, os dados não são inseridos, a tabela não é criada e assim por diante.

É possível usar a API de dados para realizar operações de longa duração que não podem ser concluídas em 45 segundos. Se você espera que uma operação, como uma operação INSERT em massa ou uma operação de DDL em uma tabela grande, leve mais de 45 segundos, especifique o parâmetro continueAfterTimeout para a operação ExecuteStatement. A aplicação ainda recebe o erro de tempo limite. No entanto, a operação continua em execução e não é cancelada. Para obter um exemplo, consulte Executar uma transação SQL.

Se o SDK da AWS da sua linguagem de programação tiver um período de tempo limite próprio para chamadas de API ou conexões de soquete HTTP, todos esses períodos de tempo limite deverão ser superiores a 45 segundos. Para alguns SDKs, o período de tempo limite é inferior a 45 segundos por padrão. Recomendamos definir qualquer período de tempo limite específico do SDK ou do cliente para pelo menos um minuto. Isso evita a possibilidade de a aplicação receber um erro de tempo limite e garante que a operação da API de dados seja concluída com êxito. Dessa forma, você pode ter certeza sobre se deve tentar novamente a operação ou não.

Por exemplo, suponha que o SDK retorne um erro de tempo limite para a aplicação, mas a operação da API de dados ainda seja concluída dentro do respectivo intervalo de tempo limite. Nesse caso, repetir a operação pode inserir dados duplicados ou produzir resultados incorretos. O SDK pode repetir a operação automaticamente, originando dados incorretos sem nenhuma ação da aplicação.

O intervalo de tempo limite é especialmente importante para o SDK para Java 2. Nesse SDK, o tempo limite da chamada de API e o tempo limite do soquete HTTP são de 30 segundos por padrão. Veja um exemplo de como configurar o tempo limite para um valor mais alto:

public RdsDataClient createRdsDataClient() { return RdsDataClient.builder() .region(Region.US_EAST_1) // Change this to your desired Region .overrideConfiguration(createOverrideConfiguration()) .httpClientBuilder(createHttpClientBuilder()) .credentialsProvider(defaultCredentialsProvider()) // Change this to your desired credentials provider .build(); } private static ClientOverrideConfiguration createOverrideConfiguration() { return ClientOverrideConfiguration.builder() .apiCallTimeout(Duration.ofSeconds(60)) .build(); } private HttpClientBuilder createHttpClientBuilder() { return ApacheHttpClient.builder() // Change this to your desired HttpClient .socketTimeout(Duration.ofSeconds(60)); }

Veja um exemplo equivalente usando o cliente de dados assíncrono:

public static RdsDataAsyncClient createRdsDataAsyncClient() { return RdsDataAsyncClient.builder() .region(Region.US_EAST_1) // Change this to your desired Region .overrideConfiguration(createOverrideConfiguration()) .credentialsProvider(defaultCredentialsProvider()) // Change this to your desired credentials provider .build(); } private static ClientOverrideConfiguration createOverrideConfiguration() { return ClientOverrideConfiguration.builder() .apiCallAttemptTimeout(Duration.ofSeconds(60)) .build(); } private HttpClientBuilder createHttpClientBuilder() { return NettyNioAsyncHttpClient.builder() // Change this to your desired AsyncHttpClient .readTimeout(Duration.ofSeconds(60)); }