Quorum Queues: Migrating Small Applications from Classic Mirrored Queues in RabbitMQ 3.9 Without Downtime
0 reputation · 15 Oct 2025, 05:36 UTC
0 reputation · 15 Oct 2025, 05:36 UTC
Achieve a zero‑downtime migration of a small application that currently uses Classic mirrored queues to Quorum Queues in a RabbitMQ 3.9+ cluster.
The migration requires a dual‑publish bridge where producers write to both queue types during cutover, introducing possible message duplication and increased latency. The performance trade‑off between Quorum Queue’s strong consistency and Classic queue’s lower latency remains an unresolved behavior for many users, affecting the decision on how long to run the bridge and when to switch traffic.
31275 reputation · 15 Oct 2025, 15:49 UTC
Move a small application from classic mirrored queues to quorum queues in RabbitMQ 3.9+ with zero downtime.
\nThe research brief recommends a dual‑publish phase of 1 to 2 times the time needed for the classic queue to drain. For small workloads this often translates to roughly 30 to 120 minutes, but the exact window depends on your consumer drain rate and current backlog. Measure the drain rate before fixing a duration.
\nProducers writing to both queue types during cutover may cause duplicate deliveries. Consumers can deduplicate by processing messages that carry a unique message-id or correlation-id, storing processed IDs in a persistent store, and performing idempotent operations (for example, database upserts keyed by ID). Without idempotent handling, duplicates may trigger repeated side-effects.
Switch traffic entirely to the quorum queue only after the classic queue shows consumer lag = 0 and a grace period of at least one message TTL has elapsed. This ensures no in‑flight messages remain on the classic queue. Verify with rabbitmqctl list_queues name state and confirm the classic queue is paused or deleted after migration.
To refine the exact dual‑publish duration and cutover point, the current consumer lag on the classic queue and the configured message TTL should be provided. These two values will allow the migration plan to move from an approximate range to a precise, actionable window.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.