AWS SDK for Java 2.x 中資源狀態的輪詢:等待者 - AWS SDK for Java 2.x

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

AWS SDK for Java 2.x 中資源狀態的輪詢:等待者

AWS SDK for Java 2.x 的等待程式公用程式可讓您在對這些 AWS 資源執行操作之前,先驗證資源是否處於指定的狀態。

等待者是用來輪詢 AWS 資源的抽象,例如 DynamoDB 資料表或 Amazon S3 儲存貯體,直到達到所需的狀態 (或直到確定資源不會達到所需的狀態)。與其編寫邏輯來持續輪詢您的 AWS 資源,這可能很麻煩且容易出錯,您可以使用等待者輪詢資源,並在資源準備就緒後讓程式碼繼續執行。

必要條件

您必須先完成設定 AWS SDK for Java 2.x 中的步驟 AWS SDK for Java,才能在專案中使用服務生。

您也必須設定專案相依性 (例如,在您的 pom.xmlbuild.gradle 檔案中),以使用 2.15.0或更新版本 AWS SDK for Java。

例如:

<project> <dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.27.21</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>

使用服務生

若要實例化等待者物件,請先建立服務用戶端。將服務用戶端waiter()的方法設定為服務器物件的值。等候程式執行個體存在後,請設定其回應選項來執行適當的程式碼。

同步程式設計

下列程式碼片段顯示如何等待 DynamoDB 資料表存在並處於 ACTIVE 狀態。

DynamoDbClient dynamo = DynamoDbClient.create(); DynamoDbWaiter waiter = dynamo.waiter(); WaiterResponse<DescribeTableResponse> waiterResponse = waiter.waitUntilTableExists(r -> r.tableName("myTable")); // print out the matched response with a tableStatus of ACTIVE waiterResponse.matched().response().ifPresent(System.out::println);

非同步程式設計

下列程式碼片段顯示如何等待 DynamoDB 資料表不再存在。

DynamoDbAsyncClient asyncDynamo = DynamoDbAsyncClient.create(); DynamoDbAsyncWaiter asyncWaiter = asyncDynamo.waiter(); CompletableFuture<WaiterResponse<DescribeTableResponse>> waiterResponse = asyncWaiter.waitUntilTableNotExists(r -> r.tableName("myTable")); waiterResponse.whenComplete((r, t) -> { if (t == null) { // print out the matched ResourceNotFoundException r.matched().exception().ifPresent(System.out::println); } }).join();

設定服務生

您可以使用其建置器overrideConfiguration()上的 來自訂服務生的組態。對於某些操作,您可以在提出請求時套用自訂組態。

設定服務生

下列程式碼片段顯示如何覆寫服務生上的組態。

// sync DynamoDbWaiter waiter = DynamoDbWaiter.builder() .overrideConfiguration(b -> b.maxAttempts(10)) .client(dynamoDbClient) .build(); // async DynamoDbAsyncWaiter asyncWaiter = DynamoDbAsyncWaiter.builder() .client(dynamoDbAsyncClient) .overrideConfiguration(o -> o.backoffStrategy( FixedDelayBackoffStrategy.create(Duration.ofSeconds(2)))) .scheduledExecutorService(Executors.newScheduledThreadPool(3)) .build();

覆寫特定請求的組態

下列程式碼片段顯示如何依請求覆寫服務生的組態。請注意,只有部分操作具有可自訂的組態。

waiter.waitUntilTableNotExists(b -> b.tableName("myTable"), o -> o.maxAttempts(10)); asyncWaiter.waitUntilTableExists(b -> b.tableName("myTable"), o -> o.waitTimeout(Duration.ofMinutes(1)));

程式碼範例

如需使用 服務生搭配 的完整範例 DynamoDB,請參閱 AWS 程式碼範例儲存庫中的 CreateTable.java

如需搭配 使用服務生的完整範例 Amazon S3,請參閱 AWS Code Examples Repository 中的 S3BucketOps.java