本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
控制資料 API 逾時行為
對資料 API 的所有呼叫都是同步。假設您執行執行 SQL 陳述式的資料 API 操作,例如 INSERT
或 CREATE TABLE
。如果資料 API 呼叫成功傳回,SQL 處理會在呼叫傳回時完成。
根據預設,如果操作未在 45 秒內完成處理,資料 API 會取消操作並傳回逾時錯誤。在這種情況下,資料不會插入,資料表也不會建立,以此類推。
您可以使用資料 API 來執行無法在 45 秒內完成的長時間執行操作。如果您預期大量操作INSERT
或大型資料表上的 DDL 操作需要超過 45 秒,您可以指定ExecuteStatement
操作的 continueAfterTimeout
參數。您的應用程式仍會收到逾時錯誤。不過,操作會繼續執行,不會取消。如需範例,請參閱「執行 SQL 交易」。
如果您的程式設計語言 AWS 開發套件有自己的 API 呼叫或 HTTP 通訊端連線逾時期間,請確定所有這類逾時期間都超過 45 秒。對於某些 SDKs,逾時期間預設為少於 45 秒。我們建議將任何 SDK 特定或用戶端特定逾時期間設定為至少一分鐘。這樣做可避免應用程式在資料 API 操作仍然成功完成時收到逾時錯誤的可能性。如此一來,您就可以確定是否要重試操作。
例如,假設 SDK 傳回逾時錯誤到您的應用程式,但資料 API 操作仍會在資料 API 逾時間隔內完成。在這種情況下,重試操作可能會插入重複的資料,否則會產生不正確的結果。軟體開發套件可能會自動重試操作,導致不正確的資料,而不需要您應用程式的任何動作。
逾時間隔對於 Java 2 開發套件特別重要。在該開發套件中,API 呼叫逾時和 HTTP 通訊端逾時預設為 30 秒。以下是將這些逾時設定為更高值的範例:
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)); }
以下是使用非同步資料用戶端的同等範例:
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)); }