本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
民意調查在 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.xml
或build.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。