기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
SQS 에서 Amazon용 자동 요청 배치 사용 AWS SDK for Java 2.x
AmazonAPI용 자동 요청 배치화는 SQS 작업에 대한 요청을 배치화하고 버퍼링하는 효율적인 방법을 제공하는 상위 수준 라이브러리SQS입니다. 배치 를 사용하면 요청 수를 로 API줄여 처리량SQS을 개선하고 비용을 최소화할 수 있습니다.
배치 API 메서드는 SqsAsyncClient
메서드, sendMessage
, changeMessageVisibility
deleteMessage
, receiveMessage
와 일치하므로 변경 사항을 최소화하면서 배치를 드롭인 대체API로 사용할 수 있습니다.
이 주제에서는 Amazon용 자동 요청 배치를 구성하고 작업하는 방법에 API 대한 개요를 제공합니다SQS.
사전 조건 확인
배치 에 액세스하려면 Java 2.x용 버전 2.28.0 이상을 사용해야 합니다API. SDK Maven에는 최소한 다음 요소가 포함되어야 pom.xml
합니다.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.28.231
</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sqs</artifactId>
</dependency>
</dependencies>
1 최신 버전
배치 관리자 생성
자동 요청 일괄 처리API는 SqsAsyncBatchManager
1. 를 사용한 기본 구성 SqsAsyncClient
배치 관리자를 생성할 수 있는 가장 간단한 방법은 기존 SqsAsyncClientbatchManager
공장 메서드를 호출하는 것입니다. 간단한 접근 방식은 다음 조각에 나와 있습니다.
SqsAsyncClient asyncClient = SqsAsyncClient.create(); SqsAsyncBatchManager sqsAsyncBatchManager = asyncClient.batchManager();
이 접근 방식을 사용하면 SqsAsyncBatchManager
인스턴스는 에 대한 구성 설정 재정의 SqsAsyncBatchManager 섹션의 테이블에 표시된 기본값을 사용합니다. 또한 SqsAsyncBatchManager
인스턴스는 인스턴스가 생성된 SqsAsyncClient
인스턴스ExecutorService
의 를 사용합니다.
1. 를 사용한 사용자 지정 구성 SqsAsyncBatchManager.Builder
고급 사용 사례의 경우 를 사용하여 배치 관리자를 사용자 지정할 수 있습니다SqsAsyncBatchManager.Builder
SqsAsyncBatchManager
인스턴스를 생성하면 배치 작업을 미세 조정할 수 있습니다. 다음 조각은 빌더를 사용하여 배치 동작을 사용자 지정하는 방법의 예를 보여줍니다.
SqsAsyncBatchManager batchManager = SqsAsyncBatchManager.builder() .client(SqsAsyncClient.create()) .scheduledExecutor(Executors.newScheduledThreadPool(5)) .overrideConfiguration(b -> b .receiveMessageMinWaitDuration(Duration.ofSeconds(10)) .receiveMessageVisibilityTimeout(Duration.ofSeconds(1)) .receiveMessageAttributeNames(Collections.singletonList("*")) .receiveMessageSystemAttributeNames(Collections.singletonList(MessageSystemAttributeName.ALL))) .build();
이 접근 방식을 사용하면 에 대한 구성 설정 재정의 SqsAsyncBatchManager 섹션의 테이블에 표시된 BatchOverrideConfiguration
객체의 설정을 조정할 수 있습니다. 이 접근 방식을 사용하여 배치 관리자에 ScheduledExecutorService
메시지 전송
배치 관리자와 메시지를 보내려면 SqsAsyncBatchManager#sendMessage
메서드를 사용합니다. SDK 버퍼는 maxBatchSize
또는 sendRequestFrequency
값에 도달하면 요청을 요청하고 일괄로 보냅니다.
다음 예제에서는 다른 sendMessage
요청 바로 다음에 오는 요청을 보여줍니다. 이 경우 는 두 메시지를 단일 배치로 SDK 보냅니다.
// Sending the first message CompletableFuture<SendMessageResponse> futureOne = sqsAsyncBatchManager.sendMessage(r -> r.messageBody("One").queueUrl("queue")); // Sending the second message CompletableFuture<SendMessageResponse> futureTwo = sqsAsyncBatchManager.sendMessage(r -> r.messageBody("Two").queueUrl("queue")); // Waiting for both futures to complete and retrieving the responses SendMessageResponse messageOne = futureOne.join(); SendMessageResponse messageTwo = futureTwo.join();
메시지 가시성 제한 시간 변경
SqsAsyncBatchManager#changeMessageVisibility
maxBatchSize
또는 sendRequestFrequency
값에 도달하면 요청을 요청하고 일괄로 보냅니다.
다음 예제에서는 changeMessageVisibility
메서드를 호출하는 방법을 보여줍니다.
CompletableFuture<ChangeMessageVisibilityResponse> futureOne = sqsAsyncBatchManager.changeMessageVisibility(r -> r.receiptHandle("receiptHandle") .queueUrl("queue")); ChangeMessageVisibilityResponse response = futureOne.join();
메시지 삭제
SqsAsyncBatchManager#deleteMessage
maxBatchSize
또는 sendRequestFrequency
값에 도달하면 요청을 요청하고 일괄로 보냅니다.
다음 예제에서는 deleteMessage
메서드를 호출하는 방법을 보여줍니다.
CompletableFuture<DeleteMessageResponse> futureOne = sqsAsyncBatchManager.deleteMessage(r -> r.receiptHandle("receiptHandle") .queueUrl("queue")); DeleteMessageResponse response = futureOne.join();
메시지 수신
기본 설정 사용
애플리케이션에서 SqsAsyncBatchManager#receiveMessage
메서드를 폴링하면 배치 관리자가 내부 버퍼에서 메시지를 가져오고, 이 백그라운드에서 SDK 자동으로 업데이트됩니다.
다음 예제에서는 receiveMessage
메서드를 호출하는 방법을 보여줍니다.
CompletableFuture<ReceiveMessageResponse> responseFuture = sqsAsyncBatchManager.receiveMessage(r -> r.queueUrl("queueUrl"));
사용자 지정 설정 사용
사용자 지정 대기 시간을 설정하고 검색할 메시지 수를 지정하는 등 요청을 추가로 사용자 지정하려면 다음 예제와 같이 요청을 사용자 지정할 수 있습니다.
CompletableFuture<ReceiveMessageResponse> response = sqsAsyncBatchManager.receiveMessage(r -> r.queueUrl("queueUrl") .waitTimeSeconds(5) .visibilityTimeout(20));
참고
다음 파라미터 중 하나를 ReceiveMessageRequest
포함하는 receiveMessage
를 사용하여 를 호출하면 는 배치 관리자를 SDK 우회하고 일반 비동기 receiveMessage
요청을 보냅니다.
-
messageAttributeNames
-
messageSystemAttributeNames
-
messageSystemAttributeNamesWithStrings
-
overrideConfiguration
에 대한 구성 설정 재정의 SqsAsyncBatchManager
SqsAsyncBatchManager
인스턴스를 생성할 때 다음 설정을 조정할 수 있습니다. 다음 설정 목록은 에서 사용할 수 있습니다BatchOverrideConfiguration.Builder
설정 | 설명 | 기본값 |
---|---|---|
maxBatchSize |
각 SendMessageBatchRequest , ChangeMessageVisibilityBatchRequest 또는 에 대한 배치당 최대 요청 수입니다DeleteMessageBatchRequest . 최대값은 10입니다. |
10 |
sendRequestFrequency |
이전에 에 도달하지 않는 한 배치를 보내기 전의 시간 |
200ms |
receiveMessageVisibilityTimeout |
메시지에 대한 가시성 제한 시간입니다. 설정 해제하면 대기열의 기본값이 사용됩니다. | 대기열의 기본값 |
receiveMessageMinWaitDuration |
receiveMessage 요청의 최소 대기 시간입니다. CPU 낭비를 방지하기 위해 를 0으로 설정하지 마세요. |
50ms |
receiveMessageSystemAttributeNames |
receiveMessage 호출을 요청할 시스템 속성 이름 |
None |
receiveMessageAttributeNames |
receiveMessage 호출을 요청할 속성 이름 목록입니다. |
None |