Chapter 5. Stomp Protocol

Abstract

The Stomp protocol is a simplified messaging protocol that is specially designed for implementing clients using scripting languages. This chapter provides a brief introduction to the protocol.

Overview

The Stomp protocol is a simplified messaging protocol that is being developed as an open source project (http://stomp.codehaus.org/). The advantage of the stomp protocol is that you can easily improvise a messaging client—even when a specific client API is not available—because the protocol is so simple.
Important
Apache ActiveMQ implements the Stomp v1.1 specification, except for the treatment of spaces that appear at the beginning or end of message header keys. The ActiveMQ implementation of Stomp trims leading and trailing spaces in message header keys (but preserves leading and trailing spaces in the header values). This behaviour is liable to change in a future release.

URI syntax

Example 5.1, “Vanilla Stop URI” shows the syntax for a vanilla Stomp connection.

Example 5.1. Vanilla Stop URI

stomp://Host:[Port]?transportOptions
An NIO URI has the syntax shown in Example 5.2, “Syntax for Stomp+NIO Connection”.

Example 5.2. Syntax for Stomp+NIO Connection

stomp+nio://Host[:Port]?transportOptions
A secure Stomp URI has the syntax shown in Example 5.3, “Syntax for a Stomp SSL Connection”.

Example 5.3. Syntax for a Stomp SSL Connection

stomp+ssl://Host[:Port]?transportOptions
A secure Stomp+NIO URI has the syntax shown in Example 5.4, “Syntax for a Stomp+NIO SSL Connection”.

Example 5.4. Syntax for a Stomp+NIO SSL Connection

stomp+nio+ssl://Host[:Port]?transportOptions

Transport options

The Stomp protocol supports the following transport options:

Table 5.1. Transport Options Supported by Stomp Protocol

PropertyDefaultDescription
transport.defaultHeartBeat0,0
Specifies how the broker simulates the heartbeat policy when working with legacy Stomp 1.0 clients. The first value in the pair specifies, in milliseconds, the server will wait between messages before timing out the connection. The second value specifies, in milliseconds, the the client will wait between messages received from the server. Because Stomp 1.0 clients do not understand heartbeat messages, the second value should always be 0. This option is set in the uri attribute of a broker's transportConnector element to enable backward compatibility with Stomp 1.0 clients.
jms.* All the properties with this prefix are used to configure client connections to a broker. See Appendix B, Client Connection Options for more information.

SSL transport options

In addition to the options supported by the non-secure Stomp transports, the SSL transport also supports the options for configuring the SSLServerSocket created for the connection. These options are listed in Table 2.1, “SSL Transport Options”.
Warning
If you are planning to enable SSL/TLS security, you must ensure that you explicitly disable the SSLv3 protocol, in order to safeguard against the Poodle vulnerability (CVE-2014-3566). For more details, see Disabling SSLv3 in JBoss Fuse 6.x and JBoss A-MQ 6.x.

Configuring broker SSL options

On the broker side, you must specify an SSL transport option using the syntax transport.OptionName. For example, to enable a Stomp SSL port on a broker, you would add the following transport element:
<transportConnector name="stompssl" uri="stomp+ssl://localhost:61617?transport.enabledProtocols=TLSv1,TLSv1.1,TLSv1.2" />
Tip
Remember, if you are specifying more than one option in the context of XML, you need to escape the ampersand, &, between options as &amp;.

Configuring client SSL options

On the client side, you must specify an SSL transport option using the syntax socket.OptionName. For example, to connect to a Stomp SSL port, you would use a URL like the following:
stomp+ssl://localhost:61617?socket.enabledProtocols=TLSv1,TLSv1.1,TLSv1.2