民意調查在 AWS SDK for Java 2.x 資源狀態:服務員 - AWS SDK for Java 2.x

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

民意調查在 AWS SDK for Java 2.x 資源狀態:服務員

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

服務員是一種用於輪詢 AWS 資源的抽象,例如 DynamoDB 表格或 Amazon S3 桶,直到達到所需的狀態(或者直到確定資源永遠不會達到所需狀態)。您可以使用 waiters 輪詢 AWS 資源,而不是編寫邏輯來持續輪詢您的資源,而是可以使用 waiters 輪詢資源,並在資源準備就緒後繼續運行代碼。

必要條件

您必須先完成設定 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.15.0</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 程式碼範例存放庫中的 S3 BucketOps .java。