Amazon SQS 메시지 대기열에 대한 긴 폴링 활성화 - AWS SDK for Java 1.x

AWS SDK for Java 1.x는 2024년 7월 31일부터 유지 관리 모드로 전환되었으며 2025년 12월 end-of-support31일에 출시될 예정입니다. 새 기능, 가용성 개선 사항 및 AWS SDK for Java 2.x보안 업데이트를 계속 받으려면 로 마이그레이션하는 것이 좋습니다.

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

Amazon SQS 메시지 대기열에 대한 긴 폴링 활성화

Amazon SQS는 기본적으로 짧은 폴링을 사용하여 서버의 하위 세트(가중치 기반 무작위 배포 기반)만을 쿼리하여 응답에 포함할 메시지를 사용할지 여부를 결정합니다.

긴 폴링은 Amazon SQS 대기열로 전송된 ReceiveMessage 요청에 대한 응답으로 반환할 수 있는 메시지가 없을 때 빈 응답 수를 줄이고 거짓 빈 응답을 제거하여 Amazon SQS 사용 시 드는 비용을 줄여줍니다.

참고

긴 폴링 빈도는 1–20초로 설정할 수 있습니다.

대기열 생성 시 긴 폴링 활성화

Amazon SQS 대기열을 생성할 때 긴 폴링을 활성화하려면 AmazonSQS 클래스의 createQueue 메서드를 호출하기 전에 CreateQueueRequest 객체에 ReceiveMessageWaitTimeSeconds 속성을 설정하세요.

가져오기

import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClientBuilder; import com.amazonaws.services.sqs.model.AmazonSQSException; import com.amazonaws.services.sqs.model.CreateQueueRequest;

코드

final AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient(); // Enable long polling when creating a queue CreateQueueRequest create_request = new CreateQueueRequest() .withQueueName(queue_name) .addAttributesEntry("ReceiveMessageWaitTimeSeconds", "20"); try { sqs.createQueue(create_request); } catch (AmazonSQSException e) { if (!e.getErrorCode().equals("QueueAlreadyExists")) { throw e; } }

GitHub의 전체 예제를 참조하세요.

기존 대기열에 대해 긴 폴링 활성화

대기열을 생성할 때 긴 폴링을 활성화하는 것 외에도, AmazonSQS 클래스의 setQueueAttributes 메서드를 호출하기 전에 SetQueueAttributesRequestReceiveMessageWaitTimeSeconds를 설정하여 기존 대기열에서 긴 폴링을 활성화할 수도 있습니다.

가져오기

import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;

코드

SetQueueAttributesRequest set_attrs_request = new SetQueueAttributesRequest() .withQueueUrl(queue_url) .addAttributesEntry("ReceiveMessageWaitTimeSeconds", "20"); sqs.setQueueAttributes(set_attrs_request);

GitHub의 전체 예제를 참조하세요.

메시지 수신 시 긴 폴링 활성화

AmazonSQS 클래스의 receiveMessage 메서드에 제공하는 ReceiveMessageRequest에서 대기 시간을 초 단위로 설정하여 메시지 수신 시 긴 폴링을 활성화할 수 있습니다.

참고

AWS 클라이언트의 요청 제한 시간이 최대 긴 폴링 시간(20초)보다 길어야만 다음 폴링 이벤트까지 기다리는 동안 receiveMessage 요청의 제한 시간이 초과되지 않습니다.

가져오기

import com.amazonaws.services.sqs.model.ReceiveMessageRequest;

코드

ReceiveMessageRequest receive_request = new ReceiveMessageRequest() .withQueueUrl(queue_url) .withWaitTimeSeconds(20); sqs.receiveMessage(receive_request);

GitHub의 전체 예제를 참조하세요.

추가 정보