Guide · RabbitMQ

The RabbitMQ Migration Guide

Migrations to RabbitMQ arrive from IBM MQ, from Kafka, from a cloud broker, and from an older RabbitMQ that has to change queue types or major versions. The mechanics differ; the sequence does not. This guide gives the short answer at each step and links the article that works it in full.

Tyler Eastridge

By Tyler Eastridge, Head of Operations

LinkedIn · Updated

3 min read7 sections
On this page
Migration in one paragraph

Migration in one paragraph

Decide whether the migration is worth it on the workload's real requirements, not the licence line. Inventory what the source actually does: queues, message sizes, ordering and delivery guarantees, consumers and their retry behaviour. Map every semantic that does not translate one-to-one, because that is where migrations fail. Build the target on quorum queues from the start. Cut over by running both systems in parallel with a bridge, validate against the objectives, and only then decommission. A migration that skips the inventory finds it during cutover.

Decide whether to migrate, and to what

The licence line is the smallest part of the comparison. The costs that decide it are dependency mapping, rebuilding integrations, parallel running and cutover risk on the workloads that matter. From IBM MQ, the case is usually cost and modernisation with a long tail of COBOL and JMS integrations to map. From Kafka, it is usually that the workload was never streaming. From a cloud broker, it is control, cost shape or lock-in. Say which one you are in before scoping anything.

Inventory the source before touching the target

Every queue and topic, message sizes and rates, ordering and delivery guarantees actually relied on, consumers and how they retry, dead-letter handling, security and TLS, and the integrations nobody has documented. The readiness checklist exists because most migrations that overrun did so on something that was not on the list.

Map the semantics that do not translate

IBM MQ's queue-manager-to-queue-manager channels, message groups and transactional puts have RabbitMQ equivalents, but not identical ones. Kafka's partitions, consumer groups and replay have no direct counterpart in exchanges and queues, and streams cover only part of the gap. Azure Service Bus sessions, scheduled messages and dead-letter semantics each need an explicit mapping. Write the mapping down per feature; a migration is a translation, and the untranslated words are the incidents.

Build the target cluster on quorum queues from day one

Do not migrate onto classic queues and plan a second migration to quorum queues later; it never happens on schedule. Design the target with the clustering guide: odd node count across failure domains, quorum queues for durable workloads, policies rather than per-queue arguments, and monitoring in place before the first message arrives.

If the source is an older RabbitMQ: classic to quorum, and the version hop

Migrating classic mirrored queues to quorum queues is its own project: a quorum queue cannot be converted in place, so each is recreated and consumers repointed, usually behind a policy change and a short drain. If a major version upgrade is in the same window, sequence the queue migration and the version hop separately, and confirm the Erlang dependency and feature-flag order before either.

Cut over without downtime: parallel run and a bridge

Run source and target side by side, bridge messages between them with a shovel or an application-level relay, move consumers first and producers last, and keep the bridge until the source is drained. Blue-green at the cluster level for version migrations; per-queue or per-service for broker migrations. The bridge is also the rollback: while it runs, moving back is a consumer repoint.

Validate against the objectives, then decommission

Message counts reconciled across the bridge, latency and throughput measured against the source under real load, the failover test run on the target, and the integrations nobody documented exercised end to end. Only then does the source come down, and only after a definitions export of the target is in version control. A migration is finished when the source is off and nobody noticed.

Frequently asked questions

How long does a migration to RabbitMQ take?

Weeks to scope properly and quarters to execute on a mid-size estate, with most of the time in inventory, semantic mapping and parallel running rather than in the broker itself. A migration that skips the inventory finds it during cutover.

Can I migrate from Kafka to RabbitMQ?

Yes, where the workload is a queue rather than a stream: request-reply, work distribution, routing by header or key, per-message acknowledgement. Replay and partition-ordered fan-out are the features that do not translate cleanly; streams cover some of that gap.

Can classic queues be converted to quorum queues in place?

No. A quorum queue is a different queue type and must be declared as such; the migration recreates each queue, repoints consumers, drains the classic queue and removes it, usually behind a policy change and a short drain window.

How do you migrate RabbitMQ without downtime?

Parallel run with a bridge: shovel or an application relay between source and target, consumers moved first, producers last, the bridge kept until the source is drained. Blue-green at cluster level for version migrations. The bridge doubles as the rollback.

RabbitMQ services

Where this gets done

More resources

Other RabbitMQ guides, comparisons and research

From the blog

Recent RabbitMQ articles

Next step

Need this done on your cluster?

AceMQ's senior RabbitMQ engineers support 130+ enterprise clients in 26+ countries under a 15-minute emergency SLA, with direct escalation to the RabbitMQ core team.