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

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

Amazon SQS 짧은 폴링 및 긴 폴링

Amazon SQS는 대기열에서 메시지를 수신하기 위한 단기 및 장기 폴링 옵션을 제공합니다. 다음 두 폴링 옵션 중에서 선택할 때는 응답성 및 비용 효율성에 대한 애플리케이션의 요구 사항을 고려하십시오.

  • 짧은 폴링 (기본값) - ReceiveMessage요청은 서버의 하위 집합 (가중치 기반 무작위 분포 기반) 을 쿼리하여 사용 가능한 메시지를 찾고 메시지가 없는 경우에도 즉시 응답을 보냅니다.

  • 긴 폴링 — 모든 서버에 메시지를 ReceiveMessage쿼리하여 하나 이상의 메시지를 사용할 수 있게 되면 지정된 최대값까지 응답을 보냅니다. 폴링 대기 시간이 만료된 경우에만 빈 응답이 전송됩니다. 이 옵션을 사용하면 빈 응답 수를 줄이고 잠재적으로 비용을 절감할 수 있습니다.

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

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

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

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

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

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

ReceiveMessage API 작업에 대한 대기 시간이 0보다 큰 경우 긴 폴링이 유효합니다. 긴 폴링 대기 시간의 최대값은 20초입니다. 긴 폴링은 빈 응답 수를 줄이고(ReceiveMessage 요청에 사용 가능한 메시지가 없는 경우) 거짓의 빈 응답을 제거하여(메시지를 사용할 수 있지만 응답에 포함되지 않은 경우) Amazon SQS 사용 비용을 줄여 줍니다. Amazon SQS 콘솔을 사용하여 새 대기열 또는 기존 대기열에 긴 폴링을 활성화하는 방법에 대한 자세한 내용은 Amazon SQS 콘솔을 사용하여 대기열 파라미터 구성 섹션을 참조하세요. 모범 사례는 긴 폴링 설정 단원을 참조하세요.

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

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

  • Amazon SQS 서버의 하위 집합이 아닌 모든 서버를 쿼리하여 잘못된 빈 응답을 줄이세요.

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

대기열이 비어 있는지 확인하는 방법에 대한 자세한 내용은 Amazon SQS 대기열이 비어 있는지 확인 섹션을 참조하세요.

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

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

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

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