콘텐츠로 이동

2026 03 06

2026-03-06

RabbitMQ 네트워크 순단

  • 개요
    • RabbitMQ <-> Consumer 연결 끊어지며 ShutdownSignalException 발생
    • MQ에서 받아서 처리하는 로직들의 철회
  • 원인
    1. LB OS 업그레이드를 통한 네트워크 순단
    2. Heartbeat (Consumer -> MQ)를 30초 간격으로 보내는데, 누락
    3. MQ 서버는 Consumer가 죽었다고 판단하여 연결 끊음
  • 복구
    • Consumer는 즉시 MQ에 Reconnect. 이후 들어온 메시지는 정상 컨슈밍
    • 다만, 네트워크 끊어지던 찰나의 순간 Consumer가 처리중이던 메시지들은 Unacked로 남음
  • Consumer 서버 재시작
    • Unacked 메시지 정리하기 위함
      1. 커넥션 완전 종료: Consumer 재시작하면 어설프게 남은 좀비 커넥션 확실히 끊어짐
      2. Requeue: MQ는 Consumer가 완전 죽었음 인지하고, Unacked 메시지를 다시 Ready로 돌려둠
      3. 재처리: Consumer가 새롭게 재처리
        • 다만, 재처리를 한다는 것은, Consuming 로직은 그대로 처리했으나 ACK만 못보낸 것이 대상
        • 따라서 이중 처리가 됨 => 두 번 처리되어도 똑같은 결과가 나오도록 멱등성을 보장할 것