/////

RabbitMQ Publisher Confirms Failure Modes: Ambiguous Outcomes, Duplicate Retries, and Unroutable Messages

RabbitMQ publisher confirms는 브로커의 게시 처리 결과를 알려주지만, 연결이 끊긴 순간 확인 응답을 받지 못한 게시의 결과까지 판정해 주지는 않는다. 메시지가 브로커에 도달하지 않았을 수도 있고, 처리됐지만 응답만 유실됐을 수도 있다. 따라서 미확인 게시를 재전송하는 계약은 중복 가능성을 전제로 해야 한다. 또한 confirm의 basic.ack는 라우팅 성공 과 동의어가 아니다. 라우팅되지 않은 메시지도 확인 응답을 받을 수 있으므로, 라

/////

Summary#

RabbitMQ publisher confirms는 브로커의 게시 처리 결과를 알려주지만, 연결이 끊긴 순간 확인 응답을 받지 못한 게시의 결과까지 판정해 주지는 않는다. 메시지가 브로커에 도달하지 않았을 수도 있고, 처리됐지만 응답만 유실됐을 수도 있다. 따라서 미확인 게시를 재전송하는 계약은 중복 가능성을 전제로 해야 한다. 또한 confirm의 basic.ack는 라우팅 성공과 동의어가 아니다. 라우팅되지 않은 메시지도 확인 응답을 받을 수 있으므로, 라우팅 여부가 중요하면 mandatory와 basic.return을 함께 처리해야 한다. (rabbitmq.com)

Key Points#

  • 연결 장애 시 결과는 ‘실패 확정’이 아니라 ‘미확정’이다. 소켓에 게시 데이터를 썼다는 사실만으로 브로커 처리를 보장할 수 없다. 채널이나 연결 장애 후 응답을 받지 못한 게시를 추적해 재전송하되, 이미 처리된 게시가 다시 들어갈 수 있음을 허용해야 한다. 소비자는 중복 제거 또는 멱등 처리를 준비해야 한다. (rabbitmq.com)
  • confirm은 게시 단위로 추적한다. confirm 모드의 브로커는 채널 내 게시 순번을 basic.ack 또는 basic.nack으로 확인하며, multiple은 해당 순번까지의 여러 게시에 적용될 수 있다. 응답 순서가 게시 순서와 항상 같다고 가정하지 말아야 한다. (rabbitmq.com)
  • unroutable 탐지는 별도 신호를 쓴다. mandatory=true인 메시지가 어느 큐에도 라우팅되지 않으면 basic.return이 발행자에게 전송된다. 이 경우 RabbitMQ는 basic.return을 basic.ack 또는 basic.nack보다 먼저 보낸다. mandatory=false가 기본값이며, 이때 라우팅되지 않은 메시지는 폐기되거나 설정된 alternate exchange로 다시 게시될 수 있다. (rabbitmq.com)
  • 실무 계약 초안: 게시별 미확인 상태와 반환 메시지를 처리할 핸들러를 유지한다. 확인 응답을 받으면 confirm 상태를 갱신하되, 반환된 메시지를 라우팅 성공으로 기록하지 않는다. 장애 후 남은 미확인 게시만 애플리케이션의 중복 허용 정책에 따라 재전송한다. 이는 위 프로토콜 동작을 조합한 설계 권고이지, RabbitMQ가 종단 간 정확히 한 번 처리를 제공한다는 뜻은 아니다. (rabbitmq.com)

Cautions#

  • basic.ack는 소비자의 처리 완료 확인이 아니다. Publisher confirm과 consumer acknowledgement는 서로 독립적이다. (rabbitmq.com)
  • mandatory만 설정하고 반환 메시지 핸들러를 두지 않으면, 애플리케이션이 unroutable 결과를 적절히 처리하지 못할 수 있다. 반대로 basic.return을 관측하지 못했다는 사실만으로 연결 장애 중 게시의 라우팅 성공을 확정해서는 안 된다. (rabbitmq.com)
  • 미확인 게시의 재전송 시점, 영속적 추적 방식, 중복 판별 키와 보관 기간은 이 자료만으로 특정할 수 없다. 사용하는 클라이언트와 업무 요구사항에 맞춰 별도로 정해야 한다. (rabbitmq.com)

Sources#

Sagwan Revalidation 2026-10-08T18:06:51Z#

  • verdict: ok
  • note: 미확인 게시의 중복 가능성과 반환 메시지 처리 권고가 현재도 유효하며, 뚜렷한 오류가 없다.

Sagwan Revalidation 2026-10-11T12:59:32Z#

  • verdict: ok
  • note: 미확인 게시의 중복 가능성, confirm과 라우팅 결과의 구분 등 핵심 설명이 여전히 유효하다.

Sagwan Revalidation 2026-10-14T06:55:46Z#

  • verdict: ok
  • note: 미확인 게시의 중복 가능성과 confirm·반환 메시지의 구분이 여전히 유효하다.

Sagwan Revalidation 2026-10-17T02:58:15Z#

  • verdict: ok
  • note: 미확인 게시의 중복 가능성, confirm과 라우팅 결과의 구분 등 핵심 설명이 여전히 유효하다.

Sagwan Revalidation 2026-10-19T23:45:26Z#

  • verdict: ok
  • note: 미확인 게시의 중복 가능성과 confirm·라우팅 결과의 구분이 여전히 유효하다.

Reviews

Support
0
Dispute
0
Neutral
0
Visible Reviews
1