Amazon Simple Queue Service
개발자 안내서

Amazon SQS 제한 시간 초과

소비자가 대기열에서 메시지를 수신하고 처리하면 메시지는 계속 대기열에 있습니다. Amazon SQS는 메시지를 자동으로 삭제하지 않습니다. Amazon SQS는 분산 시스템이므로 소비자가 메시지를 실제로 받는지 보장할 수 없습니다(예를 들어, 연결 문제 또는 소비자 애플리케이션 문제로 인해). 또한, 소비자는 메시지를 수신하고 처리한 후 대기열에서 이 메시지를 삭제해야 합니다.


	            제한 시간 초과

메시지를 수신한 직후에는 메시지가 대기열에 그대로 있습니다. 다른 소비자가 메시지를 다시 처리할 수 없도록 하기 위해 Amazon SQS에서는 다른 소비자가 Amazon SQS에서 메시지를 수신 및 처리할 수 없는 기간인 제한 시간 초과를 설정합니다. 메시지의 기본 제한 시간은 30초입니다. 최소값은은 0초입니다. 최대는 12시간입니다. AWS Management 콘솔을 사용하여 대기열에 대해 그리고 AWS SDK for Java(및 SetQueueAttributes, GetQueueAttributes, ReceiveMessage, ChangeMessageVisibility, ChangeMessageVisibilityBatch 작업)를 사용하여 단일 또는 다중 메시지에 대해 제한 시간 초과를 구성하는 방법에 대한 자세한 내용은 Amazon SQS 대기열의 제한 시간 초과 구성 단원을 참조하십시오.

참고

표준 대기열에서 제한 시간 초과는 메시지가 두 번 수신되지 않도록 보장하지 않습니다. 자세한 내용은 최소 1회 전송 단원을 참조하십시오.

FIFO 대기열에서는 다음과 같이 생성자 또는 소비자가 여러 번 재시도할 수 있도록 허용합니다.

  • 생성자가 실패한 SendMessage 작업을 감지한 경우, 동일한 메시지 중복 제거 ID를 사용하여 필요한 횟수 만큼 여러 번 재전송을 시도할 수 있습니다. 생성자가 중복 제거 간격이 만료되기 전에 최소 한 개의 승인을 수신한다고 가정하면 여러 번 재시도를 해도 메시지의 순서에 영향을 미치지도 복제를 도입하지도 않습니다.

  • 소비자가 실패한 ReceiveMessage 작업을 감지한 경우, 동일한 수신 요청 시도 ID를 사용하여 필요한 횟수 만큼 여러 번 재시도할 수 있습니다. 소비자가 제한 시간 초과가 만료되기 전에 최소 한 개의 승인을 수신한다고 가정하면 여러 번 재시도를 해도 메시지의 순서에는 영향을 미치지 않습니다.

  • 메시지 그룹 ID가 있는 메시지를 수신한 경우, 동일한 메시지 그룹 ID에 대한 메시지는 그 메시지를 삭제하거나 메시지가 표시되는 경우가 아니라면 더 이상 반환되지 않습니다.

이동 중 메시지

Amazon SQS 메시지에는 다음과 같은 세 가지 기본 상태가 있습니다.

  1. 생산자가 대기열로 전송.

  2. 소비자가 대기열에서 수신.

  3. 대기열에서 삭제.

메시지는 sent to a queue by a producer, but not yet received from the queue by a consumer이 된 후(즉, 상태 1과 상태 2 사이) 저장됨 상태로 간주됩니다. 저장된 메시지 수에는 제한이 없습니다. 메시지는 received from a queue by a consumer, but not yet deleted from the queue이 된 후(즉, 상태 2와 상태 3 사이) 이동 중 상태로 간주됩니다. 이동 중인 메시지 수에는 제한이 없습니다.

중요

Limits that apply to inflight messages are unrelated to the unlimited number of stored messages.

대부분의 표준 대기열에는(대기열 트래픽 및 메시지 백로그에 따라 다름) 최대 약 120,000개의 이동 중 메시지(received from a queue by a consumer, but not yet deleted from the queue)가 있을 수 있습니다. 이 제한에 도달하면 Amazon SQS에서 OverLimit 오류 메시지가 반환됩니다. 이 제한에 도달하지 않도록 하려면 메시지를 처리한 후 대기열에서 삭제해야 합니다. 또한 메시지를 처리하는 데 사용하는 대기열의 수를 늘릴 수 있습니다. 한도 증가를 요청하려면 지원 요청을 제출하십시오.

FIFO 대기열의 경우, 이동 중 메시지(received from a queue by a consumer, but not yet deleted from the queue)가 최대 20,000개까지 있을 수 있습니다. 이 제한에 도달해도 Amazon SQS에서는 오류 메시지를 반환하지 않습니다.

제한 시간 초과 설정

제한 시간 초과는 Amazon SQS가 메시지를 반환할 때 시작됩니다. 이 시간 동안 소비자는 메시지를 처리하고 삭제합니다. 하지만 소비자가 메시지를 삭제하기 전에 실패할 경우 제한 시간 초과가 만료되기 전에 시스템에서 해당 메시지에 대한 DeleteMessage 작업을 호출하지 않으면 다른 소비자가 메시지를 볼 수 있게 되고 메시지가 다시 수신됩니다. 메시지가 한 번만 수신되어야 하는 경우 소비자는 제한 시간 초과 기간 내에 메시지를 삭제해야 합니다.

모든 Amazon SQS 대기열에는 30초의 기본 제한 시간 초과 설정이 있습니다. 전체 대기열에 대해 이 설정을 변경할 수 있습니다. 일반적으로 애플리케이션에서 대기열의 메시지를 처리하고 삭제하는 데 소요되는 최대 시간으로 제한 시간 초과를 설정해야 합니다. 메시지를 수신할 때 전체 대기열 제한 시간을 변경하지 않고도 반환된 메시지에 대해 특별한 제한 시간 초과를 설정할 수도 있습니다. 자세한 내용은 적시에 메시지 처리 단원의 모범 사례를 참조하십시오.

메시지를 처리하는 데 시간이 얼마나 걸릴지 모르는 경우 다음과 같이 소비자 프로세스에 대한 하트비트를 생성하십시오. 초기 제한 시간 초과(예: 2분)를 지정한 다음 소비자가 메시지 작업을 계속하는 동안 제한 시간 초과를 1분마다 2분씩 연장합니다.

메시지에 대한 제한 시간 초과 변경

대기열에서 메시지를 수신하여 처리하기 시작하다 보면 이 대기열의 표시 제한 시간이 부족해질 수 있습니다(처리한 메시지를 삭제해야 하는 경우도 있음). 메시지의 제한 시간을 단축하거나 늘리기 위해 ChangeMessageVisibility 작업을 사용하여 새 제한 시간 값을 지정할 수 있습니다.

예를 들어 대기열의 시간 제한이 60초이고 메시지를 받은 뒤로 15초가 흘렀는데 VisibilityTimeout을 10초로 설정하여 ChangeMessageVisibility 호출을 보내면, ChangeMessageVisibility 호출 시점으로부터 10초를 세기 시작합니다. 따라서 표시 제한 시간(총 25초)을 처음 변경하고 10초가 지난 뒤에 이를 변경하려 하거나 메시지를 삭제하려고 하면 오류가 발생합니다.

참고

새로운 제한 시간은 ChangeMessageVisibility 작업을 호출한 시간부터 적용됩니다. 또한, 새 제한 시간은 특정 메시지 수신에만 적용됩니다. ChangeMessageVisibility는 메시지 수신이나 이후 대기열의 제한 시간에 영향을 미치지 않습니다.

메시지에 대한 제한 시간 초과 종료

대기열에서 메시지를 수신할 때 실제로 해당 메시지를 처리 및 삭제하지 않아도 됨을 알 수 있습니다. Amazon SQS를 통해 특정 메시지의 제한 시간 초과를 종료할 수 있습니다. 그리고 나면 메시지가 시스템의 다른 구성 요소에 즉시 표시되어 처리할 수 있습니다.

ReceiveMessage 호출 후 메시지의 제한 시간 초과를 종료하려면 VisibilityTimeout을 0초로 설정하고 ChangeMessageVisibility를 호출하십시오.