Amazon SQS 짧은 폴링 및 긴 폴링 - Amazon Simple Queue Service

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

Amazon SQS 짧은 폴링 및 긴 폴링

Amazon SQS 대기열에서 메시지를 수신하기 위해 짧은 폴링 및 긴 폴링을 제공합니다. 기본적으로 대기열은 짧은 폴링을 사용합니다.

다음으로 바꿉니다.짧은 폴링,ReceiveMessage요청은 서버의 하위 세트 (가중치 기반 무작위 배포 기준) 만을 쿼리하여 응답에 포함할 수 있는 메시지를 찾습니다. Amazon SQS 쿼리에서 메시지를 찾지 못한 경우에도 즉시 응답을 전송합니다.

다음으로 바꿉니다.긴 폴링,ReceiveMessage요청은 모든 서버에 메시지를 쿼리합니다. Amazon SQS 하나 이상의 사용 가능한 메시지를 수집한 후 요청에 지정된 최대 메시지 수까지 응답을 보냅니다. Amazon SQS 폴링 대기 시간이 만료된 경우에만 빈 응답을 보냅니다.

다음 섹션에서는 짧은 폴링과 긴 폴링의 세부 사항을 설명합니다.

짧은 폴링을 사용한 메시지 사용

짧은 폴링을 사용하여 대기열에서 메시지를 사용하면 Amazon SQS 서버의 하위 세트 (가중치 기반 무작위 배포 기준) 를 샘플링하고 해당 서버에서만 메시지를 반환합니다. 따라서 특정 ReceiveMessage 요청은 모든 메시지를 반환하지 않을 수도 있습니다. 하지만 대기열의 메시지 수가 1,000개 미만인 경우 이후 요청은 메시지를 반환합니다. 대기열에서 계속 사용할 경우, Amazon SQS 모든 서버를 샘플링하고 사용자는 메시지를 모두 받게 됩니다.

다음 그림은 시스템 구성 요소 중 하나가 수신 요청을 한 후 표준 대기열에서 반환되는 메시지의 짧은 폴링 동작을 보여줍니다. Amazon SQS 몇 개의 서버 (회색) 를 샘플링하고 이들 서버에서 메시지 A, C, D, B를 반환합니다. 메시지 E는 이 요청에서 반환되지 않지만 이후 요청에서 반환됩니다.


                    짧은(표준) 폴링을 사용한 메시지 샘플링

긴 폴링을 사용한 메시지 사용

ReceiveMessage API 작업에 대한 대기 시간이 0보다 큰 경우 긴 폴링이 유효합니다. 긴 폴링 대기 시간의 최대값은 20초입니다. 긴 폴링을 사용하면 빈 응답의 수를 제거하여 Amazon SQS 사용 비용을 절감할 수 있습니다 (ReceiveMessage요청) 거짓의 빈 응답 (메시지를 사용할 수 있지만 응답에 포함되지 않은 경우) Amazon SQS 콘솔을 사용한 신규 또는 기존 대기열에서 긴 폴링을 활성화하는 자세한 내용은 단원을 참조하십시오.대기열 매개 변수 구성 (콘솔). 모범 사례는 긴 폴링 설정 단원을 참조하세요.

긴 폴링은 다음과 같은 이점이 있습니다.

  • 응답을 전송하기 전에 Amazon SQS가 대기열에서 메시지를 사용할 수 있을 때까지 를 대기시켜 빈 응답을 줄입니다. 연결 시간이 초과되지 않은 경우, ReceiveMessage 요청에 대한 응답은 하나 이상의 사용 가능한 메시지부터 ReceiveMessage 작업에 지정된 최대 메시지 개수까지 포함합니다. 드물지만 대기열에 여전히 메시지가 포함되어 있어도 빈 응답을 받을 수 있습니다. 특히 낮은 값을 지정하는 경우ReceiveMessageWaitTimeSeconds파라미터.

  • 모든 (하위 세트가 아닌) Amazon SQS 서버를 쿼리하여 거짓의 빈 응답을 줄입니다.

  • 사용 가능한 즉시 메시지를 반환합니다.

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

긴 폴링과 짧은 폴링의 차이점

짧은 폴링은 WaitTimeSeconds 요청의 ReceiveMessage 파라미터가 다음 두 가지 방식 중 하나에서 0으로 설정될 때 나타납니다.

  • ReceiveMessage 호출이 WaitTimeSeconds0으로 설정합니다.

  • ReceiveMessage 호출이 WaitTimeSeconds를 설정하지 않지만 대기열 속성 ReceiveMessageWaitTimeSeconds0으로 설정되어 있습니다.