Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Controllo del comportamento di timeout dell’API dati
Tutte le chiamate all'API dati sono sincrone. Supponiamo di eseguire un’operazione dell’API dati che esegue un’istruzione SQL come INSERT o CREATE TABLE. Se la chiamata API dati viene completata correttamente, l’elaborazione SQL è terminata al momento del ritorno della chiamata.
Per impostazione predefinita, l’API dati annulla un’operazione e restituisce un errore di timeout se l’elaborazione non termina entro 45 secondi. In tal caso, i dati non vengono inseriti, la tabella non viene creata e così via.
Puoi utilizzare l’API dati per eseguire operazioni di lunga durata che non possono essere completate entro 45 secondi. Se prevedi che un’operazione, come INSERT in blocco o un’operazione DDL su una tabella di grandi dimensioni, richieda più di 45 secondi, puoi specificare il parametro continueAfterTimeout per l’operazione ExecuteStatement. L’applicazione riceve comunque l’errore di timeout. Tuttavia, l’operazione continua a essere eseguita e non viene annullata. Per vedere un esempio, consulta Esecuzione di una transazione SQL.
Se l’SDK AWS per il linguaggio di programmazione ha un proprio periodo di timeout per le chiamate API o per le connessioni socket HTTP, assicurati che tutti questi periodi di timeout siano superiori a 45 secondi. Per alcuni SDK, il periodo di timeout è inferiore a 45 secondi per impostazione predefinita. Consigliamo di impostare qualsiasi periodo di timeout specifico dell’SDK o del client su almeno un minuto. Così eviti che l’applicazione riceva un errore di timeout mentre l’operazione dell’API dati viene completata correttamente. In tal modo, puoi sapere con certezza se ripetere o meno l’operazione.
Ad esempio, supponiamo che l’SDK restituisca un errore di timeout all’applicazione, ma che l’operazione dell’API dati venga comunque completata entro l’intervallo di timeout dell’API dati. In tal caso, ripetere l’operazione potrebbe inserire dati duplicati o produrre risultati non corretti. L’SDK potrebbe ripetere automaticamente l’operazione, causando dati errati senza alcun intervento dell’applicazione.
L’intervallo di timeout è particolarmente importante per l’SDK Java 2. In tale SDK, il timeout della chiamata API e il timeout del socket HTTP sono entrambi pari a 30 secondi per impostazione predefinita. Ecco un esempio di impostazione di tali timeout su un valore più 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)); }
Ecco un esempio equivalente che utilizza il client di dati asincrono:
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)); }