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
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
Para ver un ejemplo completo del uso de waiters with Amazon S3, consulta S3 BucketOps .java