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.2 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:
Property | Default | Description |
---|---|---|
transport.defaultHeartBeat | 0,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 &
.
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