AWS re:Post을(를) 사용하면 다음에 동의하게 됩니다. AWS re:Post 이용 약관

Amazon SQS 대기열에서 메시지를 수신할 수 없는 이유는 무엇입니까?

3분 분량
0

Amazon Simple Queue Service(Amazon SQS) 대기열에 대한 ReceiveMessage API를 호출했지만 메시지가 반환되지 않았습니다.

간략한 설명

SendMessage 또는 SendMessageBatch API 호출을 사용하여 Amazon SQS 대기열에 메시지를 전송한 후, ReceiveMessage API 호출에서 해당 메시지를 검색할 수 있습니다. ReceiveMessage API 호출이 대기열에서 메시지를 찾지 못하면 빈 수신 결과를 반환합니다.

참고: MaxNumberOfMessages 파라미터는 반환되는 최대 메시지 수를 10개로 지정하며 기본값은 1입니다.

자세한 내용은 메시지 수명 주기를 참조하십시오.

해결 방법

메시지가 전송되었는지 확인

Amazon CloudWatch NumberOfMessagesSent 지표를 사용하여 메시지가 Amazon SQS 대기열로 전송되었는지 확인합니다. Amazon SQS SendMessage 또는 SendMessageBatch API 작업을 사용하면 전송된 메시지를 확인할 수 있습니다.

메시지 중복 제거 확인

Amazon SQS 선입선출(FIFO) 대기열에는 ](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-exactly-once-processing.html)중복된 메시지가 들어가지 않으므로[ 대기열에서 중복 항목이 제거될 수 있습니다. 메시지 중복 제거를 확인하여 메시지가 5분 중복 제거 간격 내에 전송되는지 확인하십시오.

메시지 지연 확인

지연 대기열로 구성한 Amazon SQS 대기열은 지연 기간 동안 연기됩니다. 메시지 타이머와 함께 보낸 메시지는 지연 시간이 끝날 때까지 표시되지 않습니다.

대기열을 전송 지연으로 구성했는지 또는 메시지 타이머로 구성했는지 확인하려면 ApproximateNumberOfMessagesDelayed CloudWatch 지표를 사용하십시오.

폴링 모드 확인

메시지가 SQS 대기열에 전송될 수 있지만 폴링에 사용할 수는 없습니다. Amazon SQS 폴링에 대한 자세한 내용은 적절한 폴링 모드 사용을 참조하십시오.

짧은 폴링

쿼리에서 메시지를 찾지 못한 경우에도 짧은 폴링 응답이 즉시 반환됩니다. Amazon SQS는 서버의 하위 집합을 샘플링하여 해당 서버에서만 메시지를 반환합니다. 자세한 내용은 ](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html#sqs-short-polling)짧은 폴링을 사용한 메시지 사용[을 참조하십시오.

긴 폴링

긴 폴링은 모든 서버를 사용하여 메시지를 쿼리합니다. Amazon SQS는 지정된 최대 수까지 사용 가능한 메시지를 하나 이상 수집한 후 응답을 보냅니다. 폴링 대기 시간이 만료된 경우에만 빈 응답이 반환됩니다. ReceiveMessage 대기 시간에 낮은 값을 지정하는 메시지가 대기열에 포함된 경우 빈 응답을 받을 수 있습니다. 자세한 내용은 ](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-short-and-long-polling.html#sqs-long-polling)긴 폴링을 사용한 메시지 사용[을 참조하십시오.

동일한 그룹 ID의 메시지를 전송 중인지 확인

FIFO 대기열의 메시지 순서는 메시지 그룹 수준에서 유지됩니다. 메시지 그룹 ID로 받은 메시지는 해당 메시지를 삭제하거나 볼 수 있게 되지 않는 한 동일한 그룹 ID에 대해 더 이상의 메시지를 반환하지 않습니다. 메시지가 대기열로 전달될 수는 있지만, 전송 중이거나 보이지 않을 경우 사용할 수 없습니다.

그룹 ID에 대한 메시지가 전송 중인지 또는 보이지 않는지 확인하려면 NumberOfMessagesReceived 또는 ApproximateNumberOfMessagesNotVisible CloudWatch 지표를 사용하십시오.

자세한 내용은 Amazon SQS FIFO 대기열이 모든 메시지 또는 다른 메시지 그룹의 메시지를 반환하지 않는 이유는 무엇입니까?를 참조하십시오.

메시지가 사용 가능하거나 표시되는지 확인

다른 소비자가 메시지를 폴링했지만 해당 메시지가 전송 중이거나 보이지 않으면 추가 폴링에서 빈 수신 결과가 반환될 수 있습니다. 수신할 수 있는 메시지가 없는지 확인하려면 ApproximateNumberOfMessagesVisible 또는 ApproximateNumberOfMessagesNotVisible 지표를 사용하십시오.

대기열이 비어 있는지 확인

대기열이 비어 있는지 확인하려면 긴 폴링을 사용하여 ReceiveMessage API를 호출하십시오. 또한 ApproximateNumberOfMessagesVisible, ApproximateNumberOfMessagesNotVisibleApproximateNumberOfMessagesDelayed CloudWatch 지표를 사용할 수도 있습니다. 몇 분 동안 모든 지표 값이 0으로 설정된 경우 대기열은 비어 있습니다.

자세한 내용은 대기열이 비어 있는지 확인을 참조하십시오.

AWS Support를 통한 문제 해결

위의 문제 해결 단계를 수행해도 문제가 해결되지 않으면 AWS Support에 문의하십시오. AWS Support와의 통신 시, 메시지 요청의 RequestIdtimestamptimezone과 함께 포함하십시오.

관련 정보

Amazon SQS 대기열 메시지를 누가 사용했는지 알아보려면 어떻게 해야 합니까?

Amazon SQS 대기열에서 증가하는 메시지 백로그를 방지하려면 어떻게 해야 합니까?

Amazon SQS FIFO 대기열 시작하기

AWS 공식
AWS 공식업데이트됨 일 년 전