RabbitMQ Migrations

RabbitMQ Migrations With Zero Message Loss

Migrating a message broker means migrating every application that talks to it. When you migrate to RabbitMQ from IBM MQ, ActiveMQ or a cloud queue, we map the protocol and semantic differences that break in production — not just the ones that break at compile time — then run both systems in parallel until the evidence says it is safe to cut over.

The only partner with direct RabbitMQ core team access

senior RabbitMQ SMEs
11+
enterprise customers
160+
countries served
26+
min emergency SLA
15

Trusted for Mission-Critical RabbitMQ by Teams in Finance, Healthcare, Defense, Telecom, and More

Customers

  • Microsoft logo
  • Henry Schein logo
  • Enbridge logo
  • Gojek logo

Partners

  • Broadcom logo
  • Redis logo
  • VMware Tanzu logo
  • OSSeva logo
AceMQ is the Featured Authorized Partner for RabbitMQ

Named by the RabbitMQ Core Team

The Featured Authorized Partner for RabbitMQ — named by the engineers who build it

AceMQ is the Featured Authorized Partner for RabbitMQ, named by the RabbitMQ Core Engineering Team — the people who write and maintain the broker. That recognition covers RabbitMQ support, licensing and professional services, and it makes AceMQ the only RabbitMQ partner with a direct line to the core team. When an escalation needs an answer that is not in the documentation, it does not stop at a support tier.

You do not have to take our word for it — RabbitMQ lists AceMQ on its own site.

See AceMQ listed on rabbitmq.com (opens in a new tab)
Only
RabbitMQ partner with a direct line to the Core Engineering Team
Support · Licensing · Services
the full scope the partner status covers
Below 72 cores
the only provider globally licensing commercial RabbitMQ under Broadcom's minimum

Is This You?

You probably need this if…

  1. 01

    Your IBM MQ or ActiveMQ licensing renewal is approaching and the number has become hard to justify

  2. 02

    You're moving from on-premise brokers to Kubernetes and need the messaging layer to come with you

  3. 03

    A previous migration attempt stalled because nobody could prove messages weren't being lost

  4. 04

    Your legacy broker is running on an OS or hardware platform that's going out of support

  5. 05

    You have JMS-based applications and no clear picture of what changes when you move to AMQP

  6. 06

    Different teams own different producers and consumers, and no one owns the cutover

  7. 07

    You need to migrate without a big-bang weekend outage the business will not approve

  8. 08

    You're consolidating several brokers acquired through M&A onto one platform

  9. 09

    Your .NET Framework applications depend on MSMQ and you are moving them to modern .NET

Outcomes

Where you are now, and where you end up

Concrete state changes, not deliverable counts. This is what actually differs about your RabbitMQ estate when the engagement closes.

  1. Before

    Paying enterprise licensing on a legacy broker for capability you have largely outgrown.

    After

    Running on RabbitMQ with the licensing line eliminated or substantially reduced, and a documented capability comparison showing nothing critical was lost.

  2. Before

    No way to prove during cutover whether messages are being dropped between systems.

    After

    Parallel-run reconciliation with message-level counts on both sides, so the cutover decision is made on evidence rather than confidence.

  3. Before

    JMS-coupled application code with broker semantics assumed throughout.

    After

    Applications migrated to AMQP with the semantic differences — acknowledgement, transactions, selectors, ordering — explicitly handled and tested.

  4. Before

    A migration plan that requires a single high-risk weekend cutover for every application at once.

    After

    An application-by-application canary cutover with per-application rollback, so a problem affects one flow rather than all of them.

  5. Before

    Broker infrastructure tied to physical hardware or a datacenter you are exiting.

    After

    RabbitMQ running on Kubernetes with the Cluster Operator, sized and configured for your actual throughput, portable across environments.

Recognise your estate here? Get a quote for RabbitMQ migrations from a senior engineer.

Contact Us

Scope

What's covered

  • 01

    ActiveMQ to RabbitMQ

    Classic and Artemis to RabbitMQ, including JMS-to-AMQP semantic mapping, selector replacement with exchange routing, and the transaction and acknowledgement differences that surface under load rather than in testing.

  • 02

    IBM MQ to RabbitMQ

    Queue manager topology to RabbitMQ exchanges and queues, channel and connection model differences, and the licensing reduction case — usually the reason the project is funded in the first place.

  • 03

    On-Premise to Kubernetes

    Migrating existing RabbitMQ clusters onto Kubernetes with the Cluster Operator — persistent volume sizing, network policy for inter-node Erlang distribution, and rolling update strategy that doesn't cost you quorum members.

  • 04

    Cloud Broker Migrations

    Azure Service Bus, Amazon SQS/SNS, or Google Pub/Sub to RabbitMQ, and the reverse where a managed service is genuinely the better answer. We will tell you which direction the evidence supports.

  • 05

    MSMQ to RabbitMQ

    Windows and .NET Framework applications built on MSMQ and System.Messaging, moved to RabbitMQ with the .NET client. Transactional queues and distributed transactions are scoped first, because they are the part with no direct equivalent.

  • 06

    Version & Platform Consolidation

    Consolidating multiple RabbitMQ clusters — often inherited through acquisition — onto a single governed platform with consistent versions, policies, and operational practice.

  • 07

    Zero-Loss Validation

    Publisher confirms, consumer acknowledgement verification, and message-level reconciliation across both systems during parallel run — so 'no messages lost' is a measured claim rather than an assurance.

Want a senior RabbitMQ engineer to scope this with you? Get a quote or send us a message.

Contact Us

The Engagement

How it actually runs

Every phase has a defined duration and a concrete artifact handed over at the end of it. You always know what stage you're in and what you've received.

  1. Phase 12–3 weeks

    Discovery & Dependency Mapping

    We inventory every queue, topic, exchange, and destination on the source broker, and — more importantly — every application that connects to it. Migrations fail on the producers and consumers nobody remembered, so this phase is deliberately exhaustive about who talks to what.

    You receive

    • Complete destination and topology inventory from the source broker
    • Application dependency map, including forgotten and low-traffic clients
    • Message volume, size, and pattern profile per flow
    • Feature gap analysis between source broker and RabbitMQ
  2. Phase 22–3 weeks

    Target Design & Protocol Mapping

    We design the RabbitMQ topology — exchanges, routing, queue types, and clustering — that matches your actual messaging patterns rather than mechanically translating the old one. Then we map the semantic differences: acknowledgement models, transaction behavior, message selectors, ordering guarantees, and dead-letter handling all differ between brokers in ways that surface only under load.

    You receive

    • Target RabbitMQ topology design with sizing
    • Protocol and semantic mapping document, source to RabbitMQ
    • Per-application client library and code change specification
    • Risk register for behaviors that cannot be mapped one-to-one
  3. Phase 33–6 weeks

    Parallel Run & Validation

    Both brokers run simultaneously with traffic mirrored to RabbitMQ. This is where the migration is actually de-risked: we reconcile message counts, compare consumer behavior, and validate throughput against real production load rather than a synthetic test. Nothing is cut over until the numbers reconcile.

    You receive

    • Parallel-run environment with traffic mirroring in place
    • Message-level reconciliation reports across both systems
    • Load and failure testing against the target cluster
    • Go/no-go criteria agreed in writing before cutover
  4. Phase 42–4 weeks

    Canary Cutover & Decommission

    We cut over application by application, starting with the lowest-risk flow, with rollback available at each step. Once every flow is stable on RabbitMQ and a defined soak period passes, we help you decommission the source broker and stop the licensing.

    You receive

    • Staged per-application cutover with rollback at each stage
    • Post-cutover monitoring and validation for each flow
    • Source broker decommissioning plan
    • Operational runbook and handover to your team

RabbitMQ migration mapping: IBM MQ, ActiveMQ, Azure Service Bus, SQS and MSMQ

Message broker migration services start with a translation of concepts: a queue manager becomes a cluster and virtual hosts, a JMS topic becomes a topic exchange, and a syncpoint transaction becomes publisher confirms plus consumer acknowledgements. The tables below are the starting map we use in discovery. The right-hand column names what does not carry over one to one, because that is where migrations fail.

IBM MQ to RabbitMQ

Our IBM MQ to RabbitMQ migration services start from this map: in discovery, every queue manager, channel and client in the estate is placed against one of these rows.

IBM MQ concepts and their RabbitMQ equivalents
IBM MQRabbitMQWhat to check
Queue managerA RabbitMQ cluster, with one virtual host per application boundaryRabbitMQ has no queue manager object. Isolation and permissions move to virtual hosts and users.
Local queueA queue, as a quorum queue where messages must survive the loss of a nodeQueue type sets durability and replication. Classic queues are not replicated.
Topic and subscriptionA topic exchange with one queue per subscriberTopic strings and routing keys use different separators and wildcards, so every subscription pattern needs translating.
Syncpoint (unit of work)Publisher confirms on the producer, manual acknowledgement on the consumerThere is no two-phase commit. Flows that depend on XA need an idempotent consumer or an outbox pattern.
Backout threshold and dead-letter queueA dead letter exchange, plus the quorum queue delivery-limitDead lettering is set by policy or queue argument. A message returned more times than the delivery-limit is dead-lettered.
Sender and receiver channels between queue managersShovel or Federation between clustersDecide per flow whether the link moves messages or only replicates routing.
MQI and JMS clientsThe RabbitMQ JMS client (JMS 2.0 and 3.0 editions) or a native AMQP clientThe JMS 3.x client needs Java 11 or later. Native clients mean code changes, which discovery specifies per application.
Wire protocolAMQP 0-9-1 by default, and AMQP 1.0 natively from RabbitMQ 4.0AMQP 1.0 in RabbitMQ does not support transactions or resuming links.

Where an outbox table replaces an XA transaction, Debezium Server can publish the outbox rows to a RabbitMQ exchange as change events. See Debezium consulting for change data capture

ActiveMQ (Classic and Artemis) to RabbitMQ

ActiveMQ and JMS concepts and their RabbitMQ equivalents
ActiveMQ / JMSRabbitMQWhat to check
JMS topicA topic exchange; each subscriber gets its own queueThe RabbitMQ JMS client uses jms.durable.topic and jms.temp.topic exchanges.
Virtual topicA topic exchange with one queue per consuming groupConsumer groups are rebuilt as bindings, so the group list must come from discovery.
Message selector on a topicTopic selector, using the RabbitMQ JMS Topic Exchange pluginThe plugin must be installed on the RabbitMQ server.
Message selector on a queueRouting keys or a headers exchangeThe RabbitMQ JMS client does not support queue selectors, so the filter moves into routing.
Transacted sessionLocal transaction in the JMS client, or confirms and acknowledgementsThe client documents that local transactions do not guarantee atomicity, and XA interfaces are not implemented.
Dead-letter queueA dead letter exchangeRedelivery limits and expiry rules need re-expressing as policy.
Queue browserThe JMS queue browser in the RabbitMQ JMS clientThe client's browser consumes messages and requeues them, so they are briefly unavailable to other consumers.
OpenWire or Core protocol clientsRabbitMQ JMS client or an AMQP clientArtemis clients that already use AMQP 1.0 can connect to RabbitMQ 4.x natively, within the AMQP 1.0 limits above.

Azure Service Bus to RabbitMQ

Moves between these two brokers go both ways. Some teams move to RabbitMQ on cost projections at message volume, and others move off it. This section is for the RabbitMQ-bound direction, and discovery tells you honestly if the evidence points the other way.

Azure Service Bus concepts and their RabbitMQ equivalents
Azure Service BusRabbitMQWhat to check
QueueA queue, as a quorum queue for durable workCheck message size, time-to-live and lock settings against the target queue arguments.
Topic and subscriptionsA topic or fanout exchange with one queue per subscriptionSubscription filter rules become bindings or a headers exchange.
Sessions (session ID, FIFO)Single Active Consumer on a queue, plus a consistent-hash exchange to spread session keys over several queuesA Service Bus session is an exclusive lock per session ID. RabbitMQ has no per-key lock, so ordering is rebuilt with partitioned queues.
Peek-lock receiveManual acknowledgement with a bounded prefetchUnacknowledged messages return to the queue when the consumer's channel closes.
Dead-letter queue and maximum delivery countA dead letter exchange, plus the quorum queue delivery-limitService Bus moves a message to its DLQ after the maximum delivery count. The delivery-limit does the same job in RabbitMQ.
AMQP 1.0 clientsRabbitMQ 4.x native AMQP 1.0, with /queues/ and /exchanges/ addressesAddressing and Service Bus-specific features do not exist on RabbitMQ, so each client is re-pointed and retested.

Amazon SQS and SNS to RabbitMQ

Amazon SQS and SNS concepts and their RabbitMQ equivalents
Amazon SQS / SNSRabbitMQWhat to check
Standard queueA queueConsumers that assume no ordering usually move unchanged.
FIFO queue and message group IDSingle Active Consumer plus a consistent-hash exchange keyed on the group IDSQS processes messages with the same group ID in sequence. Ordering in RabbitMQ holds per queue, with one active consumer.
Visibility timeout (default 30 seconds, up to 12 hours)Manual acknowledgement with a bounded prefetchLong-running handlers need acknowledgement timing designed, not copied.
Dead-letter queue with maxReceiveCountA dead letter exchange, plus the quorum queue delivery-limitSQS counts receives, RabbitMQ counts returns to the queue. Thresholds do not map directly.
HTTP API and long pollingPush consumers over a long-lived AMQP connectionEvery SQS client changes. Plan for connection recovery from day one.
SNS topic fan-outA fanout or topic exchangeCheck filter policies and cross-account delivery before cutover.

MSMQ to RabbitMQ

Microsoft's System.Messaging API is .NET Framework only and has no .NET (Core and later) edition, so moving an application to modern .NET means rebuilding its queue code anyway. That makes it a natural point to move to RabbitMQ.

MSMQ concepts and their RabbitMQ equivalents
MSMQRabbitMQWhat to check
Private and public queuesQueues in a virtual host, as quorum queues for durable workQueue paths and naming conventions are mapped in discovery.
Transactional queues with distributed transactionsPublisher confirms and manual acknowledgement, with idempotent consumersDistributed transactions are MSMQ's defining feature and have no RabbitMQ equivalent. This is the redesign cost to scope first.
System.Messaging codeThe RabbitMQ .NET clientEvery call site changes. Discovery lists them per application.
Dead-letter and journal queuesA dead letter exchange, with audit copies kept in a bound queue or a streamDecide which journal copies auditors still need.
Store-and-forward between machinesShovel or Federation, or clients connecting to the cluster directlyDecide per site whether it connects to the cluster directly or runs a Shovel.

Dual-publish cutover plan

The safest way to move a flow is to publish every message to both brokers and cut consumers over only when the two sides reconcile. Producers keep writing to the source broker and also publish to RabbitMQ with publisher confirms on. Consumers move flow by flow, lowest risk first, and rollback is a configuration change, not a restore.

Dual-publish cutover, stage by stage
StageWhat happensExit gate
1. ShadowProducers dual-publish. No RabbitMQ consumer is live.Message counts per destination match on both sides for the agreed soak period.
2. Consumer trialConsumers for the lowest-risk flow read from RabbitMQ in parallel, writing to a test target.Outputs of both paths reconcile, and every duplicate or gap is explained.
3. Flip one flowThat flow's consumers move to RabbitMQ. Producers still dual-publish.The flow is stable for the agreed soak period, and rollback has been rehearsed.
4. Stop dual publishProducers stop writing to the source broker for that flow.The source queue is drained and written sign-off is recorded.
5. Repeat, then retireRemaining flows repeat stages 2 to 4. The source broker is retired after the final soak.Decommissioning plan executed and the licence or hosting line stopped.

Rule we hold

Never combine a platform migration with a version upgrade in the same production window. If the target RabbitMQ version needs to change, that is a separate change in its own window.

Dual publishing doubles producer writes and can produce duplicates on retry, so consumers on the RabbitMQ side are built to be idempotent before stage 2 starts.

Ready to talk RabbitMQ? Get a quote or send us a message.

Contact Us

What we see in broker migration conversations

Across roughly 9 IBM MQ conversations since 2025, the drivers were licence cost and vendor support experience. Most plans were phased: the simplest workloads moved first, and IBM MQ stayed alongside RabbitMQ where it still fits. We have also scoped moves from ActiveMQ and Azure Service Bus, and one from MSMQ.

American National: IBM MQ to RabbitMQ

American National Insurance engaged AceMQ for a phased migration away from IBM MQ. Windows-based queues moved first, and a validated roadmap covers the mainframe queues that follow. We translated IBM MQ messaging patterns into RabbitMQ exchanges and bindings, gave code refactoring guidance, handled data to HIPAA requirements throughout, and ran both systems in parallel with behaviour validation before each cutover. The RabbitMQ target runs on Kubernetes. The Windows workloads are migrated, operations stayed continuous, and IBM MQ licensing cost is being removed progressively.

The full account is on the use-case page: American National IBM MQ to RabbitMQ migration

What we do not do

We deliver migration services remotely, guided by your engineers. We give you a per-application change specification rather than rewriting your application code, and we say in discovery if RabbitMQ is the wrong target.

For the whole-estate plan, from discovery to decommissioning, see legacy messaging modernization

Recognise your estate here? Get a quote for RabbitMQ migrations from a senior engineer.

Contact Us

Customer Success

Real RabbitMQ Results

See how enterprises trust AceMQ for their most critical RabbitMQ workloads.

1 / 8 case studies

All use cases

FAQ

Questions about RabbitMQ migrations

How do you guarantee no messages are lost during migration?

Through parallel running and reconciliation rather than assurance. Both brokers run simultaneously with traffic mirrored to RabbitMQ, and we reconcile message counts on both sides continuously. Cutover happens only when the numbers agree against agreed go/no-go criteria. We also verify publisher confirms and consumer acknowledgement are correctly implemented, since most real message loss originates in application code rather than the broker.

How long does an ActiveMQ or IBM MQ to RabbitMQ migration take?

For a moderately complex estate — a few dozen destinations and ten to twenty connected applications — nine to sixteen weeks end to end is typical. Discovery and parallel run take most of that time; the cutover itself is short. Large estates with hundreds of destinations, or environments with heavy JMS coupling in application code, run considerably longer. We scope after discovery rather than guessing up front.

What breaks when moving from JMS to AMQP?

The differences that matter are semantic rather than syntactic. Message selectors have no direct AMQP equivalent and must be re-expressed as exchange routing or header exchanges. Transaction and acknowledgement models differ. JMS topic durable subscriptions map differently to RabbitMQ. Ordering guarantees differ under redelivery. These compile fine and fail under production load, which is exactly why the parallel-run phase exists.

Do we need to change our application code?

Usually yes, though the extent varies considerably. Applications using a JMS abstraction layer or a framework like Spring may need only configuration and dependency changes. Applications with broker-specific behavior assumed throughout need real work. Discovery produces a per-application change specification so you can see the cost before committing, and we frequently find the effort is concentrated in two or three applications rather than spread evenly.

Can you migrate us without a big-bang cutover weekend?

Yes, and we prefer to. We cut over application by application starting with the lowest-risk flow, with rollback available at each stage. This means a problem affects one flow rather than every flow simultaneously, and it removes the need for a single high-risk window that the business has to approve. It takes longer in calendar terms and is substantially less risky.

What if RabbitMQ turns out not to be the right target?

We will say so during discovery, before you have spent the budget. Some workloads genuinely belong on Kafka — high-throughput event streaming with replay requirements is the clearest case — and some are best served by a managed cloud service. We also support Kafka and the major cloud brokers, so the recommendation is not constrained by what we can deliver. A migration to the wrong target is worse than no migration.

Do you handle the decommissioning and licensing side?

Yes. We produce a decommissioning plan for the source broker and support you through the soak period before it is switched off. Where the migration is licensing-driven, we help document the capability comparison your procurement or audit team needs. For VMware and Broadcom licensing specifically, AceMQ is the Expert Advantage Partner of the Year for the Americas and handles entitlement and true-up questions directly.

Let's talk

Migrate Once, and Migrate With Evidence

Tell us what you're migrating from and what's driving it. We'll scope the real work — including the applications that always get forgotten until cutover weekend.

Email Us

Get in Touch

Talk to a RabbitMQ Expert

Send us a message and we'll follow up within 1 hour — or book a free 30-min consultation directly.

305-204-2607
info@acemq.com
66 W. Flagler St. 9th Floor
Miami, FL 33130

Prefer to talk now? Call us directly or use the consultation tab to find a time that works.

We respond within 1 hour.

Pick a time that works — no pressure, no pitch. Just 30 minutes with an expert.

We respond within 1 hour.