[RabbitMQ] Dead Letter Exchange 사용해보기 (a.k.a DLX)

🔥Log·2024년 6월 8일
0

RabbitMQ

목록 보기
4/9

🤔 Dead Letter Exchange ?


Dead letter

RabbitMQ에서 Dead letter는 말 그대로 '죽은' 메세지를 의미하는데, Dead letter가 될 수 있는 경우는 아래와 같은 경우들이 있다.

  1. Nack 또는 Reject되면서 Requeue를 하지 않은 메세지
  2. TTL 만료된 메세지
  3. 큐가 꽉 차 있어서, 드롭된 메세지

즉, 처리되지 못한, 실패로 간주된 메세지들을 Dead letter라고 부른다.

DLX

위에서 이야기한 Dead letter만을 모으는 Exchange가 DLX이다. DLX관련 설정을 추가하면, Dead letter들은 그냥 휘발되는 것이 아니라 DLX에 모이게 된다.
이를 통해서 상황에 맞게 실패된 메세지를 재처리 해줄 수 있다.



💻 DLX 사용해보기


1) Detter letter 큐 생성

Dead letter를 쌓은 큐를 하나 만들어주자. 큐의 유형과 이름은 자유롭게 설정해도 된다.

2) DLX 생성

원하는 이름을 갖고 있는 Direct exchange를 하나 만들어주자. 이 Exchange가 DLX가 될 것이다.

3) 바인딩

부가적인 바인딩 옵션 없이, 위에서 생성한 큐와 Exchange를 바인딩해준다.

4) 일반 큐 & Exchange 생성

  1. 큐 생성
    테스트의 대상이 될 큐를 만들어준다.
    x-dead-letter-exchange에는 위에서 생성한 DLX의 이름을 입력하고, x-message-ttl은 원하는 시간(ms)를 입력한다.
  2. Exchange 생성
    적당한 이름의 Exchange를 하나 만들고 큐와 Exchange를 바인딩해준다.

5) 결과 확인

방금 생성한 Exchange에 메세지를 Publish하고, TTL에 설정한 시간만큼 기다리거나, requeuefalse로 메세지를 읽으면, DLX에 메세지가 들어가는 것을 확인할 수 있다.

DLX에 바인딩되어 있는 큐에 들어가서 메세지를 읽어보면, 해당 메세지가 왜 DL이 되었는지 어디로부터왔는지 등등의 다양한 정보와 함께 메세지를 컨슈밍할 수 있게 된다.



🙏 참고


0개의 댓글

관련 채용 정보