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: 메시지 헤더 속성 기준 큐 전달