This was generated by AI during triage.
Surfaced by CodeRabbit on the review mirror of #1559 (ADR-106, 2026-09-08).
Observed
DeclareQueueWithDLQ now declares both the primary and the parking queue as quorum queues (#1548 / ADR-106). A quorum queue makes the queue itself replicated and durable, but the dead-letter hop keeps RabbitMQ's default dead-letter-strategy=at-most-once: a dead-lettered message is re-published to the DLX without internal publisher confirms, so it can be lost between the primary and the parking queue when the target is unavailable or a node fails. ADR-106's retention wording was narrowed to say exactly that.
Proposed shape
An opt-in on DeadLetterSpec (or the quorum shape rules) that sets x-dead-letter-strategy=at-least-once together with x-overflow=reject-publish on the primary, validated at declaration time like the other quorum-shape rules, and documented with its prerequisite (the broker's stream_queue feature flag; RabbitMQ ≥ 3.10). Default stays at-most-once so existing topologies are untouched. Not a break: additive field, opt-in.
Relation
#1548, ADR-106, [C64.12]; RabbitMQ docs: quorum-queues (dead-letter strategy), dlx.
Surfaced by CodeRabbit on the review mirror of #1559 (ADR-106, 2026-09-08).
Observed
DeclareQueueWithDLQnow declares both the primary and the parking queue as quorum queues (#1548 / ADR-106). A quorum queue makes the queue itself replicated and durable, but the dead-letter hop keeps RabbitMQ's defaultdead-letter-strategy=at-most-once: a dead-lettered message is re-published to the DLX without internal publisher confirms, so it can be lost between the primary and the parking queue when the target is unavailable or a node fails. ADR-106's retention wording was narrowed to say exactly that.Proposed shape
An opt-in on
DeadLetterSpec(or the quorum shape rules) that setsx-dead-letter-strategy=at-least-oncetogether withx-overflow=reject-publishon the primary, validated at declaration time like the other quorum-shape rules, and documented with its prerequisite (the broker'sstream_queuefeature flag; RabbitMQ ≥ 3.10). Default stays at-most-once so existing topologies are untouched. Not a break: additive field, opt-in.Relation
#1548, ADR-106, [C64.12]; RabbitMQ docs: quorum-queues (dead-letter strategy), dlx.