Uso de esperadores en AWS SDK for Java 2.x - AWS SDK for Java 2.x

Uso de esperadores en AWS SDK for Java 2.x

La utilidad esperadores del AWS SDK para Java 2.x permite validar que los recursos AWS se encuentran en un estado específico antes de operar con esos recursos.

Un esperador es una abstracción que se utiliza para sondear recursos AWS, como tablas DynamoDB o buckets Amazon S3, 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 los recursos AWS, lo que puede resultar engorroso y propenso a errores, puede utilizar esperadores 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 esperadores en un proyecto con el AWS SDK para Java, debe completar los pasos que se indican en Configuración del AWS SDK para Java 2.x.

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

El siguiente fragmento de código muestra cómo esperar a que una tabla DynamoDB exista y se encuentre en estado ACTIVO.

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

El siguiente fragmento de código muestra cómo esperar a que una tabla DynamoDB 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 de uso de esperadores con DynamoDB, consulte CreateTable.java en el repositorio de ejemplos de código AWS.

Para ver un ejemplo completo de uso de esperadores con Amazon S3, consulte S3BucketOps.java en el repositorio de ejemplos de código AWS.