Which protocols does RabbitMQ support?
RabbitMQ supports several messaging protocols, directly and through the use of plugins. This page describes the supported protocols and helps differentiate between them.
AMQP 0-9-1 and extensions
RabbitMQ was originally developed to support AMQP 0-9-1. As such this protocol is the "core" protocol supported by the broker. All of these variants are fairly similar to each other, with later versions tidying up unclear or unhelpful parts of earlier versions. We have extended AMQP 0-9-1 in various ways.
AMQP 0-9-1 is a binary protocol, and defines quite strong messaging semantics. For clients it's a reasonably easy protocol to implement, and as such there are a large number of client libraries available for many different programming languages and environments.
AMQP 0-9-1 is the protocol used by RabbitMQ tutorials.
STOMP
STOMP is a text-based messaging protocol emphasising (protocol) simplicity. It defines little in the way of messaging semantics, but is easy to implement and very easy to implement partially (it's the only protocol that can be used by hand over telnet).
RabbitMQ supports STOMP (all current versions) via a plugin.
MQTT
MQTT is a binary protocol emphasising lightweight publish / subscribe messaging, targeted towards clients in constrained devices. It has well defined messaging semantics for publish / subscribe, but not for other messaging idioms.
RabbitMQ supports MQTT versions 3.1, 3.1.1, and 5.0 via a plugin.
AMQP 1.0
Despite the name, AMQP 1.0 is a radically different protocol from AMQP 0-9-1 / 0-9 / 0-8, sharing essentially nothing at the wire level. AMQP 1.0 imposes far fewer semantic requirements; it is therefore easier to add support for AMQP 1.0 to existing brokers. The protocol is substantially more complex than AMQP 0-9-1, and there are fewer client implementations.
RabbitMQ supports AMQP 1.0 via a plugin.
HTTP and WebSockets
While HTTP is not really a messaging protocol, RabbitMQ can transmit messages over HTTP in three ways:
- The Web STOMP plugin supports STOMP messaging to the browser using WebSockets.
- The Web MQTT plugin supports MQTT messaging to the browser using WebSockets.
- The management plugin supports a simple HTTP API to send and receive messages. This is primarily intended for diagnostic purposes but can be used for low volume messaging without reliable delivery.
RabbitMQ Streams
The RabbitMQ Streams protocol allows communicating with streams. RabbitMQ supports the streams protocol via a plugin.