本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Amazon SDK for Java 2.x 中对资源状态进行民意调查:服务员
Amazon SDK for Java 2.x 的 waiters 实用程序使您能够在对这些 Amazon 资源执行操作之前验证这些资源是否处于指定状态。
服务员是一种抽象概念,用于轮询 Amazon 资源,例如 DynamoDB 表或 Amazon S3 存储桶,直到达到所需的状态(或者直到确定资源永远无法达到所需状态)。与其编写逻辑来持续轮询 Amazon 资源(这可能很繁琐且容易出错),不如使用服务员来轮询资源,让您的代码在资源准备就绪后继续运行。
先决条件
必须先完成设置 Amazon SDK for Java 2. x 中的步骤 Amazon SDK for Java,然后才能在项目中使用服务员。
您还必须将项目依赖项(例如,在您的 pom.xml
或 build.gradle
文件中)配置为使用 Amazon SDK for Java版本 2.15.0
或更高版本。
例如:
<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
要实例化 waiter 对象,请先创建一个服务客户端。将服务客户端的 waiter()
方法设置为 waiter 对象的值。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();
配置 Waiter
您可以使用 waiter 的生成器上的 overrideConfiguration()
,为 waiter 自定义配置。对于某些操作,您可以在发出请求时应用自定义配置。
配置 Waiter
以下代码段演示如何覆盖 waiter 的配置。
// 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 的配置。请注意,只有某些操作具有可自定义的配置。
waiter.waitUntilTableNotExists(b -> b.tableName("myTable"), o -> o.maxAttempts(10)); asyncWaiter.waitUntilTableExists(b -> b.tableName("myTable"), o -> o.waitTimeout(Duration.ofMinutes(1)));
代码示例
有关将 waiters 与一起使用的完整示例 DynamoDB,请参阅 Amazon 代码示例CreateTable存储库中的.java。
有关使用服务员的完整示例 Amazon S3,请参阅 Amazon 代码示例存储库中的 S3 BucketOps .java。