Encuesta sobre los estados de los recursos en la versión AWS SDK for Java 2.x: Waiters - AWS SDK for Java 2.x

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Encuesta sobre los estados de los recursos en la versión AWS SDK for Java 2.x: Waiters

La utilidad waiters de la versión AWS SDK for Java 2.x permite validar que AWS los recursos se encuentran en un estado específico antes de realizar operaciones con esos recursos.

Un camarero es una abstracción que se utiliza para sondear AWS recursos, como DynamoDB tablas o Amazon S3 cubos, hasta que se alcance el estado deseado (o hasta que se determine que el recurso nunca alcanzará el estado deseado). En lugar de escribir una lógica para sondear continuamente AWS los recursos, lo que puede resultar engorroso y propenso a errores, puede utilizar waiters para sondear un recurso y hacer que el código siga ejecutándose una vez que el recurso esté listo.

Requisitos previos

Para poder usar camareros en un proyecto con el AWS SDK for Java, debes completar los pasos de Configuración de la versión 2.x. AWS SDK for Java

También debe configurar las dependencias de su proyecto (por ejemplo, en su archivo pom.xml o build.gradle) para usar la versión 2.15.0 o posterior del AWS SDK for Java.

Por ejemplo:

<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>

Uso de esperadores

Para crear una instancia de un objeto esperador, cree antes un cliente de servicio. Establece el método del cliente waiter() de servicio como el valor del objeto esperador. Una vez que exista la instancia de esperador, configure sus opciones de respuesta para ejecutar el código apropiado.

Programación asíncrona

En el siguiente fragmento de código se muestra cómo esperar a que una DynamoDB mesa exista y se encuentre en un estado. 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);

Programación asíncrona

En el siguiente fragmento de código se muestra cómo esperar a que una DynamoDB tabla deje de existir.

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();

Configurar los esperadores

Puede personalizar la configuración de un esperador utilizando el overrideConfiguration() en su creador. Para algunas operaciones, puede aplicar una configuración personalizada al realizar la solicitud.

Configurar un esperador

En el siguiente fragmento de código se muestra cómo anular la configuración de un esperador.

// 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();

Anular la configuración de una solicitud específica

El siguiente fragmento de código muestra cómo anular la configuración de un esperador en función de cada solicitud. Tenga en cuenta que solo algunas operaciones tienen configuraciones personalizables.

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

Ejemplos de código

Para ver un ejemplo completo del uso de waiters with DynamoDB, consulta CreateTable.java en el AWS repositorio de ejemplos de código.

Para ver un ejemplo completo del uso de waiters with Amazon S3, consulta S3 BucketOps .java en el AWS repositorio de ejemplos de código.