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 Data
Tutte le chiamate all'API dati sono sincrone. Supponiamo di eseguire un'operazione Data API che esegue un'istruzione SQL come INSERT
o. CREATE TABLE
Se la chiamata Data API viene restituita correttamente, l'elaborazione SQL viene completata al ritorno della chiamata.
Per impostazione predefinita, l'API Data annulla un'operazione e restituisce un errore di timeout se l'operazione non termina l'elaborazione entro 45 secondi. In tal caso, i dati non vengono inseriti, la tabella non viene creata e così via.
Puoi utilizzare l'API Data per eseguire operazioni di lunga durata che non possono essere completate entro 45 secondi. Se prevedi che un'operazione come un'operazione in blocco INSERT
o un'operazione DDL su una tabella di grandi dimensioni richieda più di 45 secondi, puoi specificare il continueAfterTimeout
parametro per l'operazione. ExecuteStatement
L'applicazione continua a ricevere 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' AWS SDK per il tuo linguaggio di programmazione ha un proprio periodo di timeout per le chiamate API o le connessioni socket HTTP, assicurati che tutti questi periodi di timeout siano superiori a 45 secondi. Per alcuni SDKs, il periodo di timeout è inferiore a 45 secondi per impostazione predefinita. Ti consigliamo di impostare qualsiasi periodo di timeout specifico dell'SDK o del client su almeno un minuto. In questo modo si evita la possibilità che l'applicazione riceva un errore di timeout mentre l'operazione Data API viene ancora completata correttamente. In questo modo, puoi essere sicuro se riprovare l'operazione o meno.
Ad esempio, supponiamo che l'SDK restituisca un errore di timeout all'applicazione, ma che l'operazione Data API venga comunque completata entro l'intervallo di timeout dell'API Data. In tal caso, ritentare l'operazione potrebbe inserire dati duplicati o altrimenti produrre risultati errati. L'SDK potrebbe ritentare l'operazione automaticamente, causando dati errati senza alcuna azione da parte dell'applicazione.
L'intervallo di timeout è particolarmente importante per Java 2 SDK. In quell'SDK, il timeout delle chiamate API e il timeout del socket HTTP sono entrambi di 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)); }