SQS - Message Visibility Timeout, Dead Letter Queue, Delay Queue

Jihun Kim·2022년 4월 11일
0

aws solutions architect

목록 보기
48/57
post-thumbnail

Message Visibility Timeout

  • 소비자가 특정 메시지를 폴링하면 해당 메시지는 다른 소비자들에게는 보이지 않는다.
  • 이렇게 다른 소비자들에게 보이지 않는 시간은 30초(message visibility timeout)이기 때문에 해당 메시지를 폴링한 소비자는 30초 이내에 메시지를 처리해야 한다.
  • visibility timeout이 지나면 해당 메시지는 다시 SQS에서 visible 상태가 된다.
    - 동일한 소비자가 두 번 수신하거나 다른 소비자가 또 한 번 수신해서 메시지는 두 번 이상의 처리 상태가 될 수 있다.
  • 만약 소비자가 메시지를 처리하는 데 시간이 더 필요하며 해당 메시지를 두 번 처리하고 싶지 않다면 ChangeMessageVisibility API를 호출해 SQS에 알려야 한다.


Dead Letter Queue

  • 메시지가 대기열에 들어갈 수 있는 최대 수신 임계값(MaximumReceives threshold)을 설정할 수 있다.
    - 만약 메시지를 처리하다 계속 타임아웃이 나게 되는 상황이 발생할 수 있으므로 대기열에 들어갈 수 있는 횟수를 제한하기 위해 설정한다.
  • 만약 최대 수신 임계값을 넘는 경우 메시지는 dead letter queue(DLQ)로 들어가게 된다.
  • DLQ가 존재하는 이유는 디버깅 때문이다. 즉, 메시지가 제대로 처리되지 못한 이유를 파악할 수 있기 때문이다.
  • DLQ에 있는 메시지 역시 특정 기간이 지나면 만료된다.
    - 14일 정도로 설정해 놓는 것이 좋다.

DLQ는 SQS를 생성할 때(혹은 수정할 때) 설정할 수 있으며 미리 DLQ를 생성해 놓으면 Queue ARN을 입력해 설정 가능하다. 여기서 설정시 나와 있는 Maximum receives는 대기열에 몇 번까지 들어간 뒤 DLQ로 들어갈 것인지를 의미한다.



Delay Queue

  • 소비자가 바로 메시지를 보지 못하도록 지연시키는 것을 말한다.
    - 최대 15분까지 가능하다.
  • 기본은 0초이지만 전체적으로 설정해 지연시간을 갖도록 하거나 DelaySeconds 파라미터를 이용해 메시지 별 지연 시간을 설정할 수도 있다.
profile
쿄쿄

0개의 댓글