Replace JMS, ActiveMQ, or AMQP 1.0 with KubeMQ
Move JMS, ActiveMQ (Java), or native AMQP 1.0 clients onto KubeMQ's one AMQP 1.0 connector — per-client on-ramps and verification.
JMS applications, ActiveMQ's Java clients, and native AMQP 1.0 clients all reach KubeMQ through the same connector — one AMQP 1.0 listener on ports 5672 (plain) and 5671 (TLS). Enable it once, then jump to the section for your client.
Drop-in level: varies by client — JMS is a client-swap, native AMQP 1.0 is endpoint/client, and ActiveMQ is client-swap (Java) or endpoint (STOMP, MQTT) — see the drop-in levels legend.
1 · Enable the connector
The AMQP 1.0 connector is disabled by default — enable it and publish its ports:
docker run -d \ --name kubemq \ -p 5672:5672 \ -p 5671:5671 \ -p 8080:8080 \ -e KUBEMQ_TOKEN=YOUR_LICENSE_KEY \ -e CONNECTORS_AMQP10_ENABLE=true \ europe-docker.pkg.dev/kubemq/images/kubemq:nextJMS (Qpid JMS)
Client: Apache Qpid JMS 2.x (jakarta namespace), or the 1.x line if your
codebase still targets javax.jms.
Swap only the ConnectionFactory — the JMS calls you already wrote (createSession,
createProducer, createConsumer, and so on) do not change.
// Before — any other JMS provider
// ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://old-broker:61616");
// After — Qpid JMS over KubeMQ's AMQP 1.0 connector
ConnectionFactory cf = new JmsConnectionFactory("amqp://kubemq-host:5672");Verify: send a TextMessage to queues/orders and receive it back with
AUTO_ACKNOWLEDGE. Open the KubeMQ dashboard's AMQP 1.0 page — you should see one
connection, one sender link, and one receiver link.
Native AMQP 1.0 (go-amqp)
Client: github.com/Azure/go-amqp v1.7.0 (AMQP.NET Lite and Apache Qpid Proton
clients migrate the same way — change only the endpoint).
// Before
// conn, err := amqp.Dial(ctx, "amqp://old-broker:5672", nil)
// After
conn, err := amqp.Dial(ctx, "amqp://kubemq-host:5672",
&amqp.ConnOptions{SASLType: amqp.SASLTypePlain("svc-orders", "<kubemq-jwt>")})Verify: attach a sender to /queues/orders, send one message, then attach a
receiver and accept it. Expected output:
received: {"id":"1","item":"widget"}ActiveMQ
Client: Apache Qpid JMS — the same client as the JMS section above.
ActiveMQ's own OpenWire protocol is not supported; a Java/JMS ActiveMQ
application migrates by swapping its ConnectionFactory to Qpid JMS, exactly like the
JMS path.
// Before — ActiveMQ Classic or Artemis (OpenWire)
// ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://activemq:61616");
// After — Qpid JMS over KubeMQ
ConnectionFactory cf = new JmsConnectionFactory("amqp://kubemq-host:5672");Verify: same as JMS — send and receive a TextMessage on queues/orders.
What carries over — and what doesn't
Queues, Events, and durable Events Store subscriptions carry over cleanly on every path
above. JMS/AMQP transactions (including XA) and a client-settable dead-letter queue do
not — a poison message past MaxReceiveCount is silently dropped, not dead-lettered.
AMQP 1.0 connector — Getting Started
The full connector walkthrough — address mapping, flow control, and a round-trip example in six languages.
Migrating from JMS
The full ConnectionFactory cutover — destination mapping, selectors, security, and the documented JMS gaps.
Migrating from ActiveMQ
Route an ActiveMQ workload by client type — JMS, STOMP, or MQTT — with the OpenWire caveat.
Migrating from AMQP 1.0
Native AMQP 1.0 address mapping, RPC, and the transaction/settlement deviations.
Didn't work?
- Connection refused on 5672 — the AMQP 1.0 connector is opt-in; confirm
CONNECTORS_AMQP10_ENABLE=truewas set on the container that's running (the literal10stays attached toAMQPwith no underscore —CONNECTORS_AMQP_1_0_ENABLEdoes not bind). JMSSecurityException/ SASL auth failure — if the server has authentication enabled, pass a KubeMQ JWT as the SASL PLAIN password; the username is audit-only.- ActiveMQ client won't connect — check it isn't still using OpenWire
(
tcp://...:61616); OpenWire has no KubeMQ equivalent, so Java clients move to Qpid JMS and non-Java clients move to the STOMP or MQTT on-ramp.
Was this page helpful?