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 파라미터를 이용해 메시지 별 지연 시간을 설정할 수도 있다.