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에 수신되면 수신 여부를 확인하기 위해 삭제될 때까지 대기열에서 유지됩니다. 수신되었지만 삭제되지 않은 메시지는 메시지가 처리 및 삭제되기 전에 두 번 이상 수신되지 않도록 하기 위해 지정된 제한 시간 초과 이후에는 후속 요청에서 제공됩니다.

참고

표준 대기열을 사용 중인 경우 제한 시간 초과를 설정해도 메시지가 두 번 이상 수신되지 않는다고 장담할 수 없습니다. 표준 대기열을 사용 중인 경우 동일 메시지가 두 번 이상 전달된 경우를 코드에서 처리할 수 있도록 해야 합니다.

단일 메시지에 대한 메시지 제한 시간 초과 설정

메시지를 수신한 후에는 AmazonSQS 클래스의 changeMessageVisibility 메서드에 전달하는 ChangeMessageVisibilityRequest에 해당 수신 핸들을 전달하여 가시성 제한 시간을 수정할 수 있습니다.

가져오기

import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClientBuilder;

코드

AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient(); // Get the receipt handle for the first message in the queue. String receipt = sqs.receiveMessage(queue_url) .getMessages() .get(0) .getReceiptHandle(); sqs.changeMessageVisibility(queue_url, receipt, timeout);

GitHub의 전체 예제를 참조하십시오.

한 번에 여러 메시지에 대한 메시지 제한 시간 초과 설정

한 번에 여러 메시지에 대한 메시지 제한 시간 초과를 설정하려면 ChangeMessageVisibilityBatchRequestEntry 객체 목록을 생성합니다. 이때 각 객체에는 고유 ID 문자열과 수신 핸들이 들어 있습니다. 다음에는 이 목록을 Amazon SQS 클라이언트 클래스의 changeMessageVisibilityBatch 메서드로 전달합니다.

가져오기

import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.AmazonSQSClientBuilder; import com.amazonaws.services.sqs.model.ChangeMessageVisibilityBatchRequestEntry; import java.util.ArrayList; import java.util.List;

코드

AmazonSQS sqs = AmazonSQSClientBuilder.defaultClient(); List<ChangeMessageVisibilityBatchRequestEntry> entries = new ArrayList<ChangeMessageVisibilityBatchRequestEntry>(); entries.add(new ChangeMessageVisibilityBatchRequestEntry( "unique_id_msg1", sqs.receiveMessage(queue_url) .getMessages() .get(0) .getReceiptHandle()) .withVisibilityTimeout(timeout)); entries.add(new ChangeMessageVisibilityBatchRequestEntry( "unique_id_msg2", sqs.receiveMessage(queue_url) .getMessages() .get(0) .getReceiptHandle()) .withVisibilityTimeout(timeout + 200)); sqs.changeMessageVisibilityBatch(queue_url, entries);

GitHub의 전체 예제를 참조하십시오.

추가 정보