콘텐츠로 이동

2025 04 19

2025-04-19

RabbitMQ DLX/DLQ

  • https://devssul.tistory.com/30
  • 메시지 손실
    • RabiitMQ 재시작 시 DLX/DLQ의 메시지 손실 되지 않는 구성을 알아보자
      • DLX (Dead Letter Exchange)
      • DLQ (Dead Letter Queue)
    • 방법
      • Exchange/Queue 설정의 Durability 값이 true 여야 함.
      • Auto delete 값이 false인지 확인
      • 메모리를 발송할 때 메시지의 Delivery Mode가 2인지 확인
        • 1 => 메모리 저장 (손실 O)
        • 2 => 디스크 저장 (손실 X)
    • Exchange/Queue
      • Exchange/Queue의 구성은 기본적으로 메모리에 저장.
      • RabiitMQ 서버 재시작하면 메모리가 초기화 되기에 Exchange/Queue 구성 사라짐.
      • 해당 설정을 줘서 메모리 아닌 디스크로 큐 인입된 내용 저장하도록 하자. 그러면 재시작해도 안 사라짐.
        • Durability: true
        • Auto Delete: false
  • DLX/DLQ
    • 프로세스 오류 유연하게 처리하기 위함
    • 프로세스에서 오류/예외 발생 => 메시지 재처리 필요 (reject) => 다시 원래 Queue로 돌아감 => 재처리할 메시지 + 신규 메시지 혼합 => 처리 효율성 low
    • DLX/DLQ를 구성함으로써 reject 된 메시지를 원래 Queue로 돌리지 않고 DLX/DLQ로 보낼 수 있음
      • 이러면 재처리 / 신규 메시지 분리됨으로써 메시지 처리 효율성 up!
  • RabbitMQ에서 Queue & Exchange
    • Exchange
      • 메시지 받아서 어떤 큐로 보내지? 결정하는 역할
      • Producer 메시지를 Queue가 아닌 Exchange로 보냄
      • 메시지를 받아서 하나 이상의 queue로 라우팅하는 역할
      • 라우팅 방식 exchange 타입에 따라 다름
      • exchange는 바인딩/라우팅 키 규칙에 따라 메시지를 Queue로 전달
    • Queue
      • 메시지 저장하는 버퍼 역할
      • exchange에서 라우팅된 메시지 받아서 consumer가 읽을 때 까지 보관
      • Consumer가 Queue에서 메시지 꺼내 처리
    • Exchange/Queue 모음
      • x.exchange.work | q.exchange.work
      • x.exchange.dlx.work | q.exchange.dlx.work
      • x.exchange.dlx.wait | q.exchange.dlx.wait
    • Exchange 타입 예시
      • Direct: 라우팅 키 정확히 일치하는 큐로 전달
      • Fanout: 바인딩된 모든 큐로 메시지 복사/전달
      • Topic: 라우팅 키 패턴 매칭 이용해 큐 전달
      • Headers: 메시지 헤더 속성 기준 큐 전달