AWS SDK for Java 2.x의 리소스 상태 설문 조사: Waiters - AWS SDK for Java 2.x

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS SDK for Java 2.x의 리소스 상태 설문 조사: Waiters

AWS SDK for Java 2.x의 waiters 유틸리티를 사용하면 리소스에 대한 작업을 수행하기 전에 AWS 리소스가 지정된 상태에 있는지 확인할 수 있습니다.

웨이터는 원하는 상태에 도달할 때까지 (또는 AWS 리소스가 원하는 상태에 도달하지 못할 것이라는 결정이 내려질 때까지) DynamoDB 테이블이나 Amazon S3 버킷과 같은 리소스를 폴링하는 데 사용되는 추상화입니다. 번거롭고 오류가 발생하기 쉬운 AWS 리소스를 지속적으로 폴링하는 로직을 작성하는 대신, 웨이터를 사용하여 리소스를 폴링하고 리소스가 준비된 후에도 코드가 계속 실행되도록 할 수 있습니다.

사전 조건

프로젝트에서 웨이터를 사용하려면 먼저 2.x 설정의 단계를 AWS SDK for Java완료해야 합니다. AWS SDK for Java

또한 AWS SDK for Java버전 2.15.0 또는 그 이상의 버전을 사용하도록 프로젝트 종속성(예: pom.xml 또는 build.gradle 파일)을 구성해야 합니다.

예:

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

코드 예시

waiters와 함께 DynamoDB사용하는 전체 예제를 보려면 코드 예제 CreateTable저장소의.java를 참조하십시오. AWS

웨이터와 함께 Amazon S3웨이터를 사용하는 전체 예제는 코드 예제 리포지토리의 S3 BucketOps .java를 참조하십시오. AWS