| = Protocols and Interoperability |
| :idprefix: |
| :idseparator: - |
| :docinfo: shared |
| |
| {project-name-full} has a powerful & flexible core which provides a foundation upon which other protocols can be implemented. |
| Each protocol implementation translates the ideas of its specific protocol onto this core. |
| |
| The broker ships with a client implementation which interacts directly with this core. |
| It uses what's called the xref:core.adoc#using-core["core" API], and it communicates over the network using the "core" protocol. |
| |
| == Supported Protocols |
| |
| The broker has a pluggable protocol architecture. |
| Protocol plugins come in the form of protocol modules. |
| Each protocol module is included on the broker's class path and loaded by the broker at boot time. |
| The broker ships with 5 protocol modules out of the box. |
| |
| === AMQP |
| |
| https://en.wikipedia.org/wiki/AMQP[AMQP] is a specification for interoperable messaging. |
| It also defines a wire format, so any AMQP client can work with any messaging system that supports AMQP. |
| AMQP clients are available in many different programming languages. |
| |
| Any client that supports the https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=amqp[AMQP 1.0] specification will be able to interact with {project-name-full}. |
| |
| Please see xref:amqp.adoc#amqp[AMQP] for more details. |
| |
| === MQTT |
| |
| https://mqtt.org/[MQTT] is a lightweight connectivity protocol. |
| It is designed to run in environments where device and networks are constrained. |
| Any client that supports the 3.1, 3.1.1, or 5 specification will be able to interact with {project-name-full}. |
| |
| Please see xref:mqtt.adoc#mqtt[MQTT] for more details. |
| |
| === STOMP |
| |
| https://stomp.github.io/[Stomp] is a very simple text protocol for interoperating with messaging systems. |
| It defines a wire format, so theoretically any Stomp client can work with any messaging system that supports Stomp. |
| Stomp clients are available in many different programming languages. |
| Any client that supports the 1.0, 1.1, or 1.2 specification will be able to interact with {project-name-full}. |
| |
| Please see xref:stomp.adoc#stomp[Stomp] for more details. |
| |
| === OpenWire |
| |
| ActiveMQ defines its own wire protocol: OpenWire. |
| Any application using the OpenWire JMS client library shipped with ActiveMQ 5.12.x or higher can be used with {project-name-full}. |
| |
| Please see xref:openwire.adoc#openwire[OpenWire] for more details. |
| |
| === Core |
| |
| {project-name-short} defines its own wire protocol: Core. |
| |
| Please see xref:core.adoc#using-core[Core] for more details. |
| |
| ==== APIs and Other Interfaces |
| |
| Although JMS and Jakarta Messaging are standardized APIs, they do not define a network protocol. |
| The {project-name-short} xref:using-jms.adoc#using-jms-or-jakarta-messaging[JMS & Jakarta Messaging clients] are implemented on top of the core protocol. |
| We also provide a xref:using-jms.adoc#jndi[client-side JNDI implementation]. |
| |
| == Configuring Acceptors |
| |
| In order to make use of a particular protocol, a transport must be configured with the desired protocol enabled. |
| There is a whole section on configuring transports that can be found xref:configuring-transports.adoc#configuring-the-transport[here]. |
| |
| The default configuration shipped with the distribution comes with a number of acceptors already defined, one for each of the above protocols plus a generic acceptor that supports all protocols. |
| To enable protocols on a particular acceptor simply add the `protocols` url parameter to the acceptor url where the value is one or more protocols (separated by commas). |
| If the `protocols` parameter is omitted from the url *all* protocols are enabled. |
| |
| * The following example enables only MQTT on port 1883 |
| + |
| [,xml] |
| ---- |
| <acceptors> |
| <acceptor>tcp://localhost:1883?protocols=MQTT</acceptor> |
| </acceptors> |
| ---- |
| |
| * The following example enables MQTT and AMQP on port 5672 |
| + |
| [,xml] |
| ---- |
| <acceptors> |
| <acceptor>tcp://localhost:5672?protocols=MQTT,AMQP</acceptor> |
| </acceptors> |
| ---- |
| |
| * The following example enables *all* protocols on `61616`: |
| + |
| [,xml] |
| ---- |
| <acceptors> |
| <acceptor>tcp://localhost:61616</acceptor> |
| </acceptors> |
| ---- |
| |
| Here are the supported protocols and their corresponding value used in the `protocols` url parameter. |
| |
| |=== |
| | Protocol | `protocols` value |
| |
| | Core | `CORE` |
| | OpenWire | `OPENWIRE` |
| | AMQP | `AMQP` |
| | MQTT | `MQTT` |
| | STOMP | `STOMP` |
| |=== |