Amazon SQS를 통한 클라이언트 측 버퍼링 및 요청 일괄 처리 지원 - Amazon Simple Queue Service

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

Amazon SQS를 통한 클라이언트 측 버퍼링 및 요청 일괄 처리 지원

AWS SDK for Java는 Amazon SQS에 액세스하는 AmazonSQSBufferedAsyncClient를 포함합니다. 이 클라이언트는 클라이언트 측 버퍼링을 사용하여 요청 배치 처리를 간소화합니다. 즉 클라이언트에서 한 호출을 먼저 버퍼링한 후 배치 요청 형태로 Amazon SQS로 전송합니다.

클라이언트 측 버퍼링을 통해 최대 10개의 요청을 버퍼링하여 배치 요청으로 전송할 수 있으므로 Amazon SQS 사용 비용이 절감되고 전송되는 요청 수가 줄어듭니다. AmazonSQSBufferedAsyncClient 버퍼는 동기식 및 비동기식 호출을 모두 버퍼링합니다. 배치 처리된 요청과 긴 폴링 지원을 통해 처리량도 높일 수 있습니다. 자세한 정보는 Amazon SQS를 통한 수평 조정 및 작업 일괄 처리를 사용하여 처리량 증가을 참조하세요.

AmazonSQSBufferedAsyncClientAmazonSQSAsyncClient와 동일한 인터페이스를 구현하므로 AmazonSQSAsyncClient에서 AmazonSQSBufferedAsyncClient로 마이그레이션하려면 일반적으로 기존 코드를 최소한만 변경하면 됩니다.

참고

Amazon SQS의 버퍼링된 비동기식 클라이언트는 현재 FIFO 대기열을 지원하지 않습니다.

Amazon SQS 사용 BufferedAsyncClient

시작하기 전에 아마존 설정 SQS의 단계를 완료해야 합니다.

중요

는 AWS SDK for Java 2.x 현재 와 호환되지 않습니다. AmazonSQSBufferedAsyncClient

AmazonSQSAsyncClient를 기반으로 새 AmazonSQSBufferedAsyncClient를 만들 수 있습니다. 예를 들면 다음과 같습니다.

// Create the basic Amazon SQS async client final AmazonSQSAsync sqsAsync = new AmazonSQSAsyncClient(); // Create the buffered client final AmazonSQSAsync bufferedSqs = new AmazonSQSBufferedAsyncClient(sqsAsync);

AmazonSQSBufferedAsyncClient를 생성한 후 이것을 이용해서 Amazon SQS에 다중 요청을 전송할 수 있습니다(AmazonSQSAsyncClient와 마찬가지로). 예를 들면 다음과 같습니다.

final CreateQueueRequest createRequest = new CreateQueueRequest().withQueueName("MyQueue"); final CreateQueueResult res = bufferedSqs.createQueue(createRequest); final SendMessageRequest request = new SendMessageRequest(); final String body = "Your message text" + System.currentTimeMillis(); request.setMessageBody( body ); request.setQueueUrl(res.getQueueUrl()); final Future<SendMessageResult> sendResult = bufferedSqs.sendMessageAsync(request); final ReceiveMessageRequest receiveRq = new ReceiveMessageRequest() .withMaxNumberOfMessages(1) .withQueueUrl(queueUrl); final ReceiveMessageResult rx = bufferedSqs.receiveMessage(receiveRq);

AmazonSQS 구성 BufferedAsyncClient

AmazonSQSBufferedAsyncClient는 대부분의 사용 사례에 적용되는 설정으로 사전 구성됩니다. AmazonSQSBufferedAsyncClient를 추가로 구성할 수 있습니다. 예를 들면 다음과 같습니다.

  1. 필요한 구성 파라미터로 QueueBufferConfig 클래스의 인스턴스를 만듭니다.

  2. AmazonSQSBufferedAsyncClient 생성자에 인스턴스를 제공합니다.

// Create the basic Amazon SQS async client final AmazonSQSAsync sqsAsync = new AmazonSQSAsyncClient(); final QueueBufferConfig config = new QueueBufferConfig() .withMaxInflightReceiveBatches(5) .withMaxDoneReceiveBatches(15); // Create the buffered client final AmazonSQSAsync bufferedSqs = new AmazonSQSBufferedAsyncClient(sqsAsync, config);
QueueBufferConfig 구성 파라미터
파라미터 기본값 설명
longPoll true

longPolltrue로 설정된 경우 AmazonSQSBufferedAsyncClient는 메시지를 사용할 때 긴 폴링을 사용하려고 시도합니다.

longPollWaitTimeoutSeconds 20s

ReceiveMessage 호출이 서버에서 차단되고 빈 수신 결과를 반환하기 전에 메시지가 대기열에 나타나기까지 대기하는 최대 시간(초)입니다.

참고

긴 폴링을 비활성화하면 이 설정은 영향을 주지 않습니다.

maxBatchOpenMs 200ms

발신 호출이 동일한 유형의 메시지를 배치 처리할 다른 호출을 대기하는 최대 시간(밀리초)입니다.

설정이 높을수록 동일한 작업량을 수행하는 데 필요한 배치 수가 감소합니다(그러나 배치의 첫 번째 호출을 대기하는 시간이 길어짐).

이 파라미터를 0으로 설정하면, 제출된 요청은 다른 요청을 기다리지 않으므로 사실상 일괄 처리하지 않게 됩니다.

maxBatchSize 배치당 요청 10개

단일 요청에서 배치 방식으로 함께 처리되는 최대 메시지 수입니다. 설정이 높을수록 동일한 요청 수를 수행하는 데 필요한 배치 수가 감소합니다.

참고

배치당 요청 10개는 Amazon SQS에 허용되는 최대값입니다.

maxBatchSizeBytes 256KiB

클라이언트가 Amazon SQS에 전송하려고 시도하는 메시지 배치의 최대 크기(바이트 단위)입니다.

참고

256KiB는 Amazon SQS에 허용되는 최대값입니다.

maxDoneReceiveBatches 배치 10개

AmazonSQSBufferedAsyncClient가 클라이언트 측에서 미리 가져와서 저장하는 수신 배치의 최대 개수입니다.

설정이 높을수록 Amazon SQS에 호출을 전송하지 않고도 만족할 수 있는 수신 요청 개수가 늘어납니다(그러나 미리 가져오는 메시지가 많을수록 메시지가 버퍼에 있는 시간이 길어지므로 표시 제한 시간이 만료될 수 있음).

참고

0모든 메시지 프리페치가 비활성화되고 메시지가 요청 시에만 소비됨을 나타냅니다.

maxInflightOutboundBatches 배치 5개

동시에 처리될 수 있는 활성 아웃바운드 배치의 최대 개수입니다.

설정이 높을수록 아웃바운드 배치 전송 속도가 빨라지고(CPU 또는 대역폭과 같은 할당량도 영향을 줌), AmazonSQSBufferedAsyncClient에서 사용하는 스레드 수가 많아집니다.

maxInflightReceiveBatches 배치 10개

동시에 처리될 수 있는 활성 수신 배치의 최대 개수입니다.

설정이 높을수록 수신 가능한 메시지가 많아지고(CPU 또는 대역폭과 같은 할당량도 영향을 줌), AmazonSQSBufferedAsyncClient에서 사용하는 스레드 수가 많아집니다.

참고

0모든 메시지 프리페치가 비활성화되고 메시지가 요청 시에만 소비됨을 나타냅니다.

visibilityTimeoutSeconds -1

이 파라미터를 0이 아닌 양수 값으로 설정하면, 여기에 설정된 제한 시간 초과는 메시지가 사용되는 대기열에서 설정된 제한 시간 초과를 재정의합니다.

참고

-1은 대기열에서 기본 설정이 선택되어 있음을 나타냅니다.

제한 시간 초과를 0으로 설정할 수 없습니다.