You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by bu...@apache.org on 2016/08/31 13:22:20 UTC

svn commit: r996348 - in /websites/production/activemq/content: amqp.html cache/main.pageCache stomp.html

Author: buildbot
Date: Wed Aug 31 13:22:20 2016
New Revision: 996348

Log:
Production update by buildbot for activemq

Modified:
    websites/production/activemq/content/amqp.html
    websites/production/activemq/content/cache/main.pageCache
    websites/production/activemq/content/stomp.html

Modified: websites/production/activemq/content/amqp.html
==============================================================================
--- websites/production/activemq/content/amqp.html (original)
+++ websites/production/activemq/content/amqp.html Wed Aug 31 13:22:20 2016
@@ -82,25 +82,25 @@
   <tbody>
         <tr>
         <td valign="top" width="100%">
-<div class="wiki-content maincontent"><p>ActiveMQ supports the <a shape="rect" class="external-link" href="https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=amqp" rel="nofollow">AMQP 1.0</a> protocol which is an OASIS standard.</p><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Availability</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Available from ActiveMQ version <a shape="rect" href="activemq-580-release.html">5.8</a> onwards.</p></div></div><h3 id="AMQP-EnablingtheActiveMQBrokerforAMQP">Enabling the ActiveMQ Broker for AMQP</h3><p>Its very easy to enable ActiveMQ for AMQP. Just add a connector to the broker using the amqp URL.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<div class="wiki-content maincontent"><p>ActiveMQ supports the <a shape="rect" class="external-link" href="https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=amqp" rel="nofollow">AMQP 1.0</a> protocol which is an OASIS standard.</p><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Availability</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Available from ActiveMQ version <a shape="rect" href="activemq-580-release.html">5.8</a> onward.</p></div></div><h3 id="AMQP-EnablingtheActiveMQBrokerforAMQP">Enabling the ActiveMQ Broker for AMQP</h3><p>To enable AMQP protocol support on the broker add the following transport connector configuration referencing the&#160;<strong><code>amqp</code></strong> scheme in its URI:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">&lt;transportConnectors&gt;
    &lt;transportConnector name="amqp" uri="amqp://0.0.0.0:5672"/&gt;
 &lt;/transportConnectors&gt;
 </pre>
-</div></div><p>It is enabled in the default ActiveMQ server configuration.</p><p>For more help see <a shape="rect" href="run-broker.html">Run Broker</a>.</p><h3 id="AMQP-Security">Security</h3><p>The AMQP implementation fully supports an <a shape="rect" href="security.html">ActiveMQ security</a> mechanism. This means that the broker accepts plain SASL authentication. Also, the authorization policies will be applied when you try to access (read/write) certain destinations.</p><div class="confluence-information-macro confluence-information-macro-tip"><p class="title">SSL</p><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>For additional security, you can use AMQP over SSL as described in the following section.</p></div></div><h3 id="AMQP-EnablingAMQPoverNIO">Enabling AMQP over NIO</h3><p>For better scalability (and performance) you might want to run the AMQP protocol over the NIO trans
 port. To do that just use <code>amqp+nio</code> transport prefix instead of <code>amqp</code>. For example, add the following transport configuration in your XML file:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">     &lt;transportConnector name="amqp+nio" uri="amqp+nio://localhost:5672"/&gt;
+</div></div><p>It is enabled in the default ActiveMQ server configuration. For more help see <a shape="rect" href="run-broker.html">Run Broker</a>.</p><h3 id="AMQP-Security">Security</h3><p>The AMQP implementation fully supports an <a shape="rect" href="security.html">ActiveMQ security</a> mechanism. This allows the broker to accept plain SASL authentication. Authorization policies are applied to a destination when it's accessed (read/write).</p><div class="confluence-information-macro confluence-information-macro-tip"><p class="title">SSL</p><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>For additional security AMQP can be configured to run over SSL as described in the following section.</p></div></div><h3 id="AMQP-EnablingAMQPoverNIO">Enabling AMQP over NIO</h3><p>For better scalability (and performance) the AMQP protocol should be configured to use NIO, rather than the default o
 f TCP. To use NIO use the transport scheme <strong><code>amqp+nio</code></strong> instead of <strong><code>amqp</code></strong>.</p><p>Example:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;transportConnector name="amqp+nio" uri="amqp+nio://localhost:5672"/&gt;
 </pre>
-</div></div><p>This transport uses the <a shape="rect" class="external-link" href="http://activemq.apache.org/configuring-transports.html#ConfiguringTransports-TheNIOTransport">NIO transport</a> underneath and will generally use much less threads than the standard connector. This connector can help if you want to use <a shape="rect" class="external-link" href="http://activemq.apache.org/how-do-i-configure-10s-of-1000s-of-queues-in-a-single-broker-.html">large number of queues</a></p><h3 id="AMQP-EnablingAMQPoverSSL">Enabling AMQP over SSL</h3><p>It's easy to configure ActiveMQ to use AMQP over a SSL connection. All you have to do is use the <code>amqp+ssl</code> transport prefix instead of <code>amqp</code>. For example, add the following transport configuration in your XML file:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">     &lt;transportConnector name="amqp+ssl" uri="amqp+ssl://localhost:5671"/&gt;
+</div></div><p>This transport uses the <a shape="rect" class="external-link" href="http://activemq.apache.org/configuring-transports.html#ConfiguringTransports-TheNIOTransport">NIO transport</a> underneath and will generally use much less threads than the standard connector. This connector can help if you want to use <a shape="rect" class="external-link" href="http://activemq.apache.org/how-do-i-configure-10s-of-1000s-of-queues-in-a-single-broker-.html">large number of queues</a></p><h3 id="AMQP-EnablingAMQPoverSSL">Enabling AMQP over SSL</h3><p>It's easy to configure ActiveMQ to use AMQP over a SSL connection. To use SSL use the transport scheme <strong><code>amqp+ssl</code></strong> instead of <strong><code>amqp</code></strong>.</p><p>Example:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;transportConnector name="amqp+ssl" uri="amqp+ssl://localhost:5671"/&gt;
 </pre>
-</div></div><ul><li>For more details on using SSL with ActiveMQ, see the following article (<a shape="rect" class="external-link" href="http://activemq.apache.org/how-do-i-use-ssl.html">How do I use SSL</a>).</li></ul><h3 id="AMQP-WorkingwithDestinationswithAMQP">Working with Destinations with AMQP</h3><p>You should prefix destination address with `queue://` to use Queue based destinations or `topic://` to use topic based destinations. If an AMQP address is used without the prefix, it will be used as a Queue.</p><h3 id="AMQP-Prefetchsizeandcredit">Prefetch size and credit</h3><p>When AMQP receiver connects to the broker, its mapped to the JMS consumer. This JMS consumer has to have appropriate <a shape="rect" href="what-is-the-prefetch-limit-for.html">prefetch size</a> set.&#160;<span style="line-height: 1.4285715;">The broker will respect the credit set by the client or use default value of 1000 if client don't set it.</span></p><p>You can also tune a default value using <code>pref
 etch</code> transport attribute, like</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">&lt;transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;amp;wireFormat.maxFrameSize=104857600&amp;amp;transport.prefetch=10"/&gt;</pre>
-</div></div><p class="p1">In this case, client preference will be ignored and the configured value will be used.</p><p class="p1">You can also tune broker-side amqp receiver link that handles incoming messages. It will use credit of 1000 messages by default, but you can override this by using&#160;<span><code>producerCredit</code> property, like&#160;</span></p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">&lt;transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;amp;wireFormat.maxFrameSize=104857600&amp;amp;transport.producerCredit=10000"/&gt;</pre>
-</div></div><h3 id="AMQP-MappingtoJMS">Mapping to JMS</h3><p>There are three basic conversion strategies that can be used with AMQP and interoperating with the JMS API.</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Strategy</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>native</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong>Default</strong> Wraps the bytes of the AMQP message into a JMS BytesMessage and<br clear="none"> also maps the headers of the AMQP message to headers on the JMS message</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>raw</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Wraps the bytes of the AMQP message into a JMS BytesMessage</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>jms</p></td><td colspan="1" rowspan="1" class="con
 fluenceTd"><p>Maps headers of the AMQP message to JMS message headers and maps the<br clear="none"> body of the AMQP message to JMS body</p></td></tr></tbody></table></div><p>Set the <strong>transformer</strong> transport option on the transportConnector to the desired mapping strategy. For example, to interoperate with JMS at the payload level, set the <strong>transformer</strong> option to <strong>jms</strong></p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">     &lt;transportConnector name="amqp" uri="amqp://localhost:5672?transport.transformer=jms"/&gt;
+</div></div><p>For more details on using SSL with ActiveMQ, see the following article (<a shape="rect" class="external-link" href="http://activemq.apache.org/how-do-i-use-ssl.html">How do I use SSL</a>).</p><h3 id="AMQP-WorkingwithDestinationswithAMQP">Working with Destinations with AMQP</h3><p>You should prefix destination address with&#160;<strong><code>queue://</code></strong> to use queue based destinations or&#160;<strong><code>topic://</code></strong> to use topic based destinations. The destination type defaults to queue when the destination prefix is omitted.</p><h3 id="AMQP-PrefetchSizeandCredit">Prefetch Size and Credit</h3><p>When AMQP receiver connects to the broker it's mapped to the JMS consumer. This JMS consumer has to have appropriate <a shape="rect" href="what-is-the-prefetch-limit-for.html">prefetch size</a> set.&#160;<span style="line-height: 1.4285715;">The broker will honor the credit set by the client or use the default value of&#160;<strong><code>1000</code><
 /strong> if client doesn't set it.</span></p><p>Example: tuning the default <strong><code>prefetch</code></strong> size:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;amp;wireFormat.maxFrameSize=104857600&amp;amp;transport.prefetch=10"/&gt;</pre>
+</div></div><p class="p1">In this case, client preference will be ignored and the configured value will be used.</p><p class="p1">You can also tune broker-side&#160;<strong><code>amqp</code></strong> receiver link that handles incoming messages. It will use credit of&#160;<strong><code>1000</code></strong> messages by default, but you can override this by using&#160;<span><strong><code>producerCredit</code></strong> property, like&#160;</span></p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;amp;wireFormat.maxFrameSize=104857600&amp;amp;transport.producerCredit=10000"/&gt;</pre>
+</div></div><h3 id="AMQP-MappingtoJMS">Mapping to JMS</h3><p>There are three basic conversion strategies that can be used with AMQP and inter-operating with the JMS API.</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Strategy</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>native</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>(<strong>Default</strong>) Wraps the bytes of the AMQP message into a JMS&#160;<strong><code>BytesMessage</code></strong> and maps the headers of the AMQP message to headers on the JMS message.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>raw</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Wraps the bytes of the AMQP message into a JMS <strong><code>BytesMessage</code></strong>.</p></td></tr><tr><td colspan="1" rowspan="1" 
 class="confluenceTd"><p><code>jms</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Maps headers of the AMQP message to JMS message headers and the body of the AMQP message to the JMS body.</p></td></tr></tbody></table></div><p>Set the <strong>transformer</strong> transport option on the&#160;<strong><code>transportConnector</code></strong> to the desired mapping strategy. For example, to inter-operate with JMS at the payload level, set the <strong><code>transformer</code></strong> option to <strong><code>jms</code></strong>:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;transportConnector name="amqp" uri="amqp://localhost:5672?transport.transformer=jms"/&gt;
 </pre>
-</div></div><h4 id="AMQP-HowAMQPmessageheadersaremappedtoJMSHeaders:">How AMQP message headers are mapped to JMS Headers:</h4><p>The following headers are mapped regardless of the transformer used:</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>AMQP Message</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>JMS Message</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Notes</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMS_AMQP_NATIVE</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Will be set to true if the transformer is 'native' or 'raw', false otherwise.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>message-format</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMS_AMQP_MESSAGE_FORMAT</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p
 ></td></tr></tbody></table></div><p>The following headers are mapped if the transformer is 'native' or 'jms':</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>AMQP Message</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>JMS Message</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Notes</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>header.durable</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMSDeliveryMode</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>javax.jms.Message.DEFAULT_DELIVERY_MODE if not set</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>header.priority</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMSPriority</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>javax.jms.Message.DEFAULT_PRIORITY if not set</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>header.ttl</
 p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMSExpiration</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>javax.jms.Message.DEFAULT_TIME_TO_LIVE if not set</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>header.first-acquirer</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMS_AMQP_FirstAcquirer</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>header.deliveryCount</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMSXDeliveryCount</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>delivery-annotations.<strong><span style="text-decoration: underline;">name</span></strong></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMS_AMQP_DA_<strong><span style="text-decoration: underline;">name</span></strong></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" r
 owspan="1" class="confluenceTd"><p>message-annotations.x-opt-jms-type</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMSType</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>message-annotations.x-opt-to-type</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Type of the JMSDestination</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Comma separated list of 'queue', 'topic', or 'temporary', defaults to queue if not set.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>message-annotations.x-opt-reply-type</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Type of the JMSReplyTo</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Comma separated list of 'queue', 'topic', or 'temporary', defaults to queue if not set.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>message-annotations.<strong><span style="text-de
 coration: underline;">name</span></strong></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMS_AMQP_MA_<strong><span style="text-decoration: underline;">name</span></strong></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>application-properties.JMSXGroupID</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMSXGroupID</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>application-properties.JMSXGroupSequence</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMSXGroupSequence</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>application-properties.JMSXUserID</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMSXUserID</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></
 td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>application-properties.<strong><span style="text-decoration: underline;">name</span></strong></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong><span style="text-decoration: underline;">name</span></strong></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>properties.message-id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMSMessageID</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Auto generated if not set</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>properties.user-id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMSXUserID</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>properties.user-id is decoded as a UTF-8 String</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>properties.to</p></td><td colspan="1" rowspan="1" class
 ="confluenceTd"><p>JMSDestination</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The name of the JMSDestination</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>properties.subject</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMS_AMQP_Subject</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>properties.reply-to</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMSReplyTo</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The name of the JMSReplyTo</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>properties.correlation-id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMSCorrelationID</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>properties.content-type</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>J
 MS_AMQP_ContentType</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>properties.content-encoding</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMS_AMQP_ContentEncoding</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>properties.creation-time</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMSTimestamp</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>properties.group-sequence</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMSXGroupSequence</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>properties.reply-to-group-id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMS_AMQP_ReplyToGroupID</p></
 td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>footer.<strong><span style="text-decoration: underline;">name</span></strong></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>JMS_AMQP_FT_<strong><span style="text-decoration: underline;">name</span></strong></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr></tbody></table></div><p>AMQP property value types are converted as follows:</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>AMQP Type</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Java Type</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Notes</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>bool</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Boolean</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr
 ><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>byte</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Byte</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>short</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Short</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>int</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Integer</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>long</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Long</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>ubyte</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Byte or Short</p></td><td colspan="1" rowspan=
 "1" class="confluenceTd"><p>Short is used if value &gt; Byte.MAX_VALUE</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>ushort</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Short or Integer</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Integer is used if value &gt; Short.MAX_VALUE</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>uint</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Integer or Long</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Long is used if value &gt; Integer.MAX_VALUE</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>ulong</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Long</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>double</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Double</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#
 160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>float</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Float</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>symbol</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>binary</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>String</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Hex encoding of the binary value</p></td></tr></tbody></table></div><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><p>&#160;</p><h4 id="AMQP-HowAMQPmessagesbodiesaremappedtoJMSMessages:">How AMQP messages bodies are mapped to JMS Messages:</h4><p>If the transformer is set to 'jms', the they type of JMS message will depend on 
 the body type of the AMQP message.</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Body Type</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>JMS Message Type</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>null</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Message</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Data</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>BytesMessage</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>AmqpSequence</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>StreamMessage</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>AmqpValue holding a null</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Message</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>AmqpValue holding a String</p></td><td colspan="1" rowspan="1" class="confluen
 ceTd"><p>TextMessage</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>AmqpValue holding a binary</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>BytesMessage</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>AmqpValue holding a list</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>StreamMessage</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>AmqpValue</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>ObjectMessage</p></td></tr></tbody></table></div><h3 id="AMQP-AMQP1.0clientlibrary">AMQP 1.0 client library</h3><p>You can use <a shape="rect" class="external-link" href="http://qpid.apache.org/proton/">Apache Qpid Proton</a>.</p></div>
+</div></div><h4 id="AMQP-HowAMQPMessageHeadersareMappedtoJMSHeaders">How AMQP Message Headers are Mapped to JMS Headers</h4><p>The following headers are mapped regardless of the transformer used:</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>AMQP Message</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>JMS Message</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Notes</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMS_AMQP_NATIVE</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Will be set to&#160;<strong><code>true</code></strong> if the transformer is&#160;<strong><code>native</code></strong> or <strong><code>raw</code></strong>,&#160;<strong><code>false</code></strong> otherwise.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>message-format</code
 ></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMS_AMQP_MESSAGE_FORMAT</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr></tbody></table></div><p>The following header mappings apply when the transformer is either <strong><code>native</code></strong> or <strong><code>jms</code></strong>:</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>AMQP Message</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>JMS Message</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Notes</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>application-properties.JMSXGroupID</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMSXGroupID</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>application-properties.JMSXGroupSeq
 uence</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMSXGroupSequence</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>application-properties.JMSXUserID</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMSXUserID</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>application-properties.<u><strong>name</strong></u></code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><u><strong><code>name</code></strong></u></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>delivery-annotations.<u><strong>name</strong></u></code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMS_AMQP_DA_<u><strong>name</strong></u></code></p></td><t
 d colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>footer.<u><strong>name</strong></u></code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMS_AMQP_FT_<u><strong>name</strong></u></code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>header.deliveryCount</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMSXDeliveryCount</code></p></td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>header.durable</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMSDeliveryMode</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong><code>javax.jms.Message.DEFAULT_DELIVERY_MODE</code></strong> if not set.</p></td></tr><tr><td colspan="1" rowspan="1" class="conflue
 nceTd"><p><code>header.first-acquirer</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMS_AMQP_FirstAcquirer</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>header.priority</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMSPriority</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong><code>javax.jms.Message.DEFAULT_PRIORITY</code></strong> if not set.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>header.ttl</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMSExpiration</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong><code>javax.jms.Message.DEFAULT_TIME_TO_LIVE</code></strong> if not set.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>message-annotations.<u><strong>name</strong></u></code></p></td><td colsp
 an="1" rowspan="1" class="confluenceTd"><p><code>JMS_AMQP_MA_<u><strong>name</strong></u></code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>message-annotations.x-opt-jms-type</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMSType</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>message-annotations.x-opt-reply-type</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Type of the&#160;<code>JMSReplyTo</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Comma separated list of <strong><code>queue</code></strong>, <strong><code>topic</code></strong>, or <strong><code>temporary</code></strong>. Defaults to&#160;<strong><code>queue</code></strong> if not set.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>messag
 e-annotations.x-opt-to-type</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Type of the&#160;<code>JMSDestination</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Comma separated list of <strong><code>queue</code></strong>, <strong><code>topic</code></strong>, or <strong><code>temporary</code></strong>. Defaults to&#160;<strong><code>queue</code></strong> if not set.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>properties.content-encoding</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMS_AMQP_ContentEncoding</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>properties.content-type</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMS_AMQP_ContentType</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" cla
 ss="confluenceTd"><p><code>properties.correlation-id</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMSCorrelationID</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>properties.creation-time</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMSTimestamp</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>properties.group-sequence</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMSXGroupSequence</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>properties.message-id</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMSMessageID</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Auto
  generated if not set.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>properties.reply-to</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMSReplyTo</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The name of the&#160;<strong><code>JMSReplyTo</code></strong></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>properties.reply-to-group-id</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMS_AMQP_ReplyToGroupID</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>properties.subject</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMS_AMQP_Subject</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>properties.to</code></p></td><td colspan="1" rowspan="1" c
 lass="confluenceTd"><p><code>JMSDestination</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The name of the&#160;<strong><code>JMSDestination</code></strong></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>properties.user-id</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>JMSXUserID</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong><code>properties.user-id</code></strong> is decoded as a UTF-8 String.</p></td></tr></tbody></table></div><p>&#160;</p><p>AMQP property value types are converted as follows:</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>AMQP Type</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Java Type</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Notes</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>binary</code></p></td><td colspan="1" rowspan="1" c
 lass="confluenceTd"><p><code>String</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Hex encoding of the binary value</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>bool</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Boolean</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>byte</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Byte</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>double</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Double</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>float</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Floa
 t</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>int</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Integer</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>long</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Long</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>short</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Short</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>symbol</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String</code></p></td><td colspan="1" rowspan="1" class="confluenc
 eTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ubyte</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Byte</code> or&#160;<code>Short</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong><code>Short</code></strong> is used if: <strong><code>value &gt;</code></strong> <strong><code>Byte.MAX_VALUE</code></strong></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>uint</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Integer</code> or&#160;<code>Long</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong><code>Long</code></strong> is used if: <strong><code>value &gt;</code></strong> <strong><code>Integer.MAX_VALUE</code></strong></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ulong</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Long</code></p></td><td colspan="1" rowspan="1" cla
 ss="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ushort</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Short</code> or&#160;<code>Integer</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong><code>Integer</code></strong> is used if:&#160;<strong><code>value &gt;</code></strong> <strong><code>Short.MAX_VALUE</code></strong></p></td></tr></tbody></table></div><h4 id="AMQP-HowaAMQPMessagesBodyisMappedtoaJMSMessage">How a AMQP Messages Body is Mapped to a JMS Message</h4><p>If the transformer is set to <strong><code>jms</code></strong> then the JMS message type will depend on the body type of the AMQP message.</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Body Type</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>JMS Message Type</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><cod
 e>AmqpSequence</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>StreamMessage</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>AmqpValue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ObjectMessage</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>AmqpValue</code> holding a&#160;<code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>AmqpValue</code> holding a&#160;<code>String</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>TextMessage</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>AmqpValue</code> holding a&#160;<code>binary</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>BytesMessage</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Amq
 pValue</code> holding a&#160;<code>list</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>StreamMessage</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Data</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>BytesMessage</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td></tr></tbody></table></div><h3 id="AMQP-AMQP1.0clientlibrary">AMQP 1.0 client library</h3><p>You can use <a shape="rect" class="external-link" href="http://qpid.apache.org/proton/">Apache Qpid Proton</a>.</p></div>
         </td>
         <td valign="top">
           <div class="navigation">

Modified: websites/production/activemq/content/cache/main.pageCache
==============================================================================
Binary files - no diff available.

Modified: websites/production/activemq/content/stomp.html
==============================================================================
--- websites/production/activemq/content/stomp.html (original)
+++ websites/production/activemq/content/stomp.html Wed Aug 31 13:22:20 2016
@@ -82,7 +82,7 @@
   <tbody>
         <tr>
         <td valign="top" width="100%">
-<div class="wiki-content maincontent"><p>ActiveMQ supports the <a shape="rect" class="external-link" href="http://stomp.github.com/" rel="nofollow">Stomp</a> protocol and the Stomp - JMS mapping. This makes it easy to write a client in pure <a shape="rect" class="unresolved" href="#">Ruby</a>, <a shape="rect" class="unresolved" href="#">Perl</a>, <a shape="rect" class="unresolved" href="#">Python</a> or <a shape="rect" class="unresolved" href="#">PHP</a> for working with ActiveMQ.</p><p>Please see the <a shape="rect" class="external-link" href="http://stomp.github.io/" rel="nofollow">Stomp site</a> for more details</p><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Spec Compliance</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>ActiveMQ v5.6 implements the Stomp v1.1 spec except for allowing spaces at the beginning or end of messag
 e header keys, they are preserved in the header values however. In future releases this will not be the case, clients should be updated and user code checked to ensure that spaces in the headers are there intentionally and not as a accident or a client "feature".</p></div></div><h3 id="Stomp-EnablingtheActiveMQBrokerforStomp">Enabling the ActiveMQ Broker for Stomp</h3><p>Its very easy to enable ActiveMQ for Stomp. Just add a connector to the broker using the stomp URL.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<div class="wiki-content maincontent"><p>ActiveMQ supports the <a shape="rect" class="external-link" href="http://stomp.github.com/" rel="nofollow">Stomp</a> protocol and the Stomp - JMS mapping. This makes it easy to write a client in pure <a shape="rect" class="unresolved" href="#">Ruby</a>, <a shape="rect" class="unresolved" href="#">Perl</a>, <a shape="rect" class="unresolved" href="#">Python</a> or <a shape="rect" class="unresolved" href="#">PHP</a> for working with ActiveMQ.</p><p>Please see the <a shape="rect" class="external-link" href="http://stomp.github.io/" rel="nofollow">Stomp site</a> for more details</p><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Spec Compliance</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>ActiveMQ v5.6 implements the Stomp v1.1 spec except for allowing spaces at the beginning or end of messag
 e header keys, they are preserved in the header values however. In future releases this will not be the case, clients should be updated and user code checked to ensure that spaces in the headers are there intentionally and not as a accident or a client "feature".</p></div></div><h3 id="Stomp-EnablingtheActiveMQBrokerforStomp">Enabling the ActiveMQ Broker for Stomp</h3><p>To enable STOMP protocol support in the broker add a transport connector definition whose URI scheme is <strong><code>stomp</code></strong>.</p><p>Example:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;transportConnectors&gt;
    &lt;transportConnector name="stomp" uri="stomp://localhost:61613"/&gt;
 &lt;/transportConnectors&gt;
@@ -90,20 +90,20 @@
 </div></div><p>To see a full example, try <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/activemq/trunk/assembly/src/release/example/conf/activemq.xml">this XML</a>. If you save that XML as&#160;<strong><code>foo.xml</code></strong> then you can run stomp via the command line as</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">activemq xbean:foo.xml
 </pre>
-</div></div><p>For more help see <a shape="rect" href="run-broker.html">Run Broker</a>.</p><h3 id="Stomp-TheStompWireFormat">The Stomp Wire Format</h3><p>Stomp uses a text based wire format that can be configured with the following options. &#160;All options can be configured on a Brokers transport bind URI.</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Parameter Name</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Default Value</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>maxDataLength</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>104857600</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Maximum size of the message body (content) that can be sent.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>maxFrameSize</code></p></td><t
 d colspan="1" rowspan="1" class="confluenceTd"><p><code>MAX_LONG</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>(v5.12.0) Maximum frame size that can be sent. A Stomp frame includes a command, optional headers, and an optional body. Can help help prevent OOM DOS attacks</p></td></tr></tbody></table></div><div class="confluence-information-macro confluence-information-macro-warning"><p class="title">Use the Correct Prefix!</p><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Wire format options must have the prefix&#160;<strong><code>wireFormat.</code></strong> to take effect, e.g.,&#160;<strong><code>wireFormat.<code>maxDataLength</code>=100000</code></strong>. Options missing this prefix will be ignored.</p></div></div><h4 id="Stomp-ExampleWireFormatConfiguration">Example Wire Format Configuration<br clear="none">&#160;</h4><div class="code panel pdl" style="border-
 width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>For more help see <a shape="rect" href="run-broker.html">Run Broker</a>.</p><h3 id="Stomp-TheStompWireFormat">The Stomp Wire Format</h3><p>Stomp uses a text based wire format that can be configured with the following options. &#160;All options can be configured on a Brokers transport bind URI.</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Parameter Name</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Default Value</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>maxDataLength</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>104857600</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Maximum size of the message body (content) that can be sent.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>maxFrameSize</code></p></td><t
 d colspan="1" rowspan="1" class="confluenceTd"><p><code>MAX_LONG</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>(v5.12.0) Maximum frame size that can be sent. A Stomp frame includes a command, optional headers, and an optional body. Can help help prevent OOM DOS attacks</p></td></tr></tbody></table></div><p>Example:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;transportConnector name="stomp+ssl" uri="stomp+ssl://localhost:61612?wireFormat.maxFrameSize=1000000"/&gt;</pre>
-</div></div><h3 id="Stomp-Security">Security</h3><p>Stomp implementation fully supports an <a shape="rect" href="security.html">ActiveMQ security</a> mechanism. This means that the <strong><code>CONNECT</code></strong> command will return an <strong><code>ERROR</code></strong> STOMP frame on unsuccessful authentication. Also, the authorization policies will be applied when you try to access (read/write) certain destinations. If you use synchronous operations (by using <a shape="rect" class="external-link" href="http://stomp.github.com/stomp-specification-1.1.html#RECEIPT" rel="nofollow">receipts</a>), you can expect an <code>ERROR</code> frame in case of unauthorized access attempt. In other case, operations will be discarded but the client will not be informed of errors. This also stands for all other errors that can happen on the broker side.</p><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Availability</p><span class="aui-icon
  aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Stomp security implementation is available from version 5.1 on.</p></div></div><div class="confluence-information-macro confluence-information-macro-tip"><p class="title">SSL</p><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>For additional security, you can use Stomp over SSL as described in the following section.</p></div></div><h3 id="Stomp-EnablingStompoverNIO">Enabling Stomp over NIO</h3><p>For better scalability (and performance) you might want to run Stomp protocol over NIO transport. To do that just use <strong><code>stomp+nio</code></strong> transport prefix instead of <code>stomp</code>. For example, add the following transport configuration in your XML file</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelConte
 nt pdl">
+</div></div><div class="confluence-information-macro confluence-information-macro-warning"><p class="title">Use the Correct Prefix!</p><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Wire format options must have the prefix&#160;<strong><code>wireFormat.</code></strong> to take effect, e.g.,&#160;<strong><code>wireFormat.<code>maxDataLength</code>=100000</code></strong>. Options missing this prefix will be ignored.</p></div></div><h3 id="Stomp-Security">Security</h3><p>Stomp implementation fully supports an <a shape="rect" href="security.html">ActiveMQ security</a> mechanism. This means that the <strong><code>CONNECT</code></strong> command will return an <strong><code>ERROR</code></strong> STOMP frame on unsuccessful authentication. Also, the authorization policies will be applied when you try to access (read/write) certain destinations. If you use synchronous operations (by using <a
  shape="rect" class="external-link" href="http://stomp.github.com/stomp-specification-1.1.html#RECEIPT" rel="nofollow">receipts</a>), you can expect an <strong><code>ERROR</code></strong> frame in case of unauthorized access attempt. In other case, operations will be discarded but the client will not be informed of errors. This applies to all errors that can occur broker-side.</p><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Availability</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Stomp security implementation is available from version 5.1 on.</p></div></div><div class="confluence-information-macro confluence-information-macro-tip"><p class="title">SSL</p><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>For additional security
 , you can use Stomp over SSL as described in the following section.</p></div></div><h3 id="Stomp-EnablingStompoverNIO">Enabling Stomp over NIO</h3><p>For better scalability (and performance) you might want to run Stomp protocol over NIO transport. To do that just use <strong><code>stomp+nio</code></strong> transport prefix instead of <strong><code>stomp</code></strong>. For example, add the following transport configuration in your XML file</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;transportConnector name="stomp+nio" uri="stomp+nio://localhost:61612"/&gt;
 </pre>
-</div></div><p>This transport use <a shape="rect" class="external-link" href="http://activemq.apache.org/configuring-transports.html#ConfiguringTransports-TheNIOTransport">NIO transport</a> underneath and will generally use much less threads than standard connector. This connector can help if you want to use <a shape="rect" class="external-link" href="http://activemq.apache.org/how-do-i-configure-10s-of-1000s-of-queues-in-a-single-broker-.html">large number of queues</a></p><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Availability</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Stomp NIO connector implementation is available in version 5.3 and up.</p></div></div><h3 id="Stomp-EnablingStompoverSSL">Enabling Stomp over SSL</h3><p>It's easy to configure ActiveMQ to use Stomp over SSL connection. All you have to do is use <strong><c
 ode>stomp+ssl</code></strong> transport prefix instead of <code>stomp</code>. For example, add the following transport configuration in your XML file</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>This transport use <a shape="rect" class="external-link" href="http://activemq.apache.org/configuring-transports.html#ConfiguringTransports-TheNIOTransport">NIO transport</a> underneath and will generally use much less threads than standard connector. This connector can help if you want to use <a shape="rect" class="external-link" href="http://activemq.apache.org/how-do-i-configure-10s-of-1000s-of-queues-in-a-single-broker-.html">large number of queues</a></p><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Availability</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Stomp NIO connector implementation is available in version 5.3 and up.</p></div></div><h3 id="Stomp-EnablingStompoverSSL">Enabling Stomp over SSL</h3><p>It's easy to configure ActiveMQ to use Stomp over SSL connection. All you have to do is use <strong><c
 ode>stomp+ssl</code></strong> transport prefix instead of <strong><code>stomp</code></strong>. For example, add the following transport configuration in your XML file</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;transportConnector name="stomp+ssl" uri="stomp+ssl://localhost:61612"/&gt;
 </pre>
-</div></div><ul><li>For more details on using SSL with ActiveMQ see the following article (<a shape="rect" class="external-link" href="http://activemq.apache.org/how-do-i-use-ssl.html">How do I use SSL</a>).</li><li>Example of using Stomp over SSL on the client side could be found in the <a shape="rect" class="external-link" href="http://stomp.fusesource.org/documentation/php/book.html#SSL" rel="nofollow">PHP Stomp client example </a>.</li></ul><h3 id="Stomp-Heart-beatgraceperiods">Heart-beat grace periods</h3><p>The STOMP protocol (version 1.1 or greater) <a shape="rect" class="external-link" href="http://stomp.github.io/stomp-specification-1.2.html#Heart-beating" rel="nofollow">defines the concept of heart beats</a> as a method by which a client and broker can determine the health of the underlying TCP connection between them.</p><p>ActiveMQ offers support for STOMP defined heart beating provided the client is using version 1.1 (or greater) of the protocol. Prior to ActiveMQ 5.9.0
 , however, the enforcement of the 'read' heart-beat timeout (that is, a heart-beat sent from the client to the broker) was strict. In other words, the broker was intolerant of late arriving read heart-beats from the client. This resulted in the broker concluding that the client was no longer present causing it to close its side of the client's connection when the client failed to honor it's configured heart-beat settings.</p><p>As of version 5.9.0 the timeout enforcement for read heart-beats is now configurable via a new transport option&#160;<strong><code>transport.hbGracePeriodMultiplier</code></strong>:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><ul><li><p>For more details on using SSL with ActiveMQ see the following article (<a shape="rect" class="external-link" href="http://activemq.apache.org/how-do-i-use-ssl.html">How do I use SSL</a>).</p></li><li><p>Example of using Stomp over SSL on the client side could be found in the <a shape="rect" class="external-link" href="http://stomp.fusesource.org/documentation/php/book.html#SSL" rel="nofollow">PHP Stomp client example</a>.</p></li></ul><h3 id="Stomp-Heart-beatgraceperiods">Heart-beat grace periods</h3><p>The STOMP protocol (version 1.1 or greater) <a shape="rect" class="external-link" href="http://stomp.github.io/stomp-specification-1.2.html#Heart-beating" rel="nofollow">defines the concept of heart beats</a> as a method by which a client and broker can determine the health of the underlying TCP connection between them.</p><p>ActiveMQ offers support for STOMP defined heart beating provided the client is using version 1.1 (or greater) of the protocol. Prior to A
 ctiveMQ 5.9.0, however, the enforcement of the 'read' heart-beat timeout (that is, a heart-beat sent from the client to the broker) was strict. In other words, the broker was intolerant of late arriving read heart-beats from the client. This resulted in the broker concluding that the client was no longer present causing it to close its side of the client's connection when the client failed to honor it's configured heart-beat settings.</p><p>As of version 5.9.0 the timeout enforcement for read heart-beats is now configurable via a new transport option&#160;<strong><code>transport.hbGracePeriodMultiplier</code></strong>:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: xml; gutter: false; theme: Default" style="font-size:12px;">&lt;transportConnectors&gt;
    &lt;transportConnector name="stomp" uri="stomp://localhost:61613?transport.hbGracePeriodMultiplier=1.5"/&gt;
 &lt;/transportConnectors&gt;
 </pre>
-</div></div><p>This multiplier is used to calculate the effective read heart-beat timeout the broker will enforce for each client's connection. The multiplier is applied to the read-timeout interval the client specifies in its&#160;<strong><code>CONNECT</code></strong> frame:</p><p><code>&#160; <strong>&lt;client specified read heart-beat interval&gt; * &lt;grace periodmultiplier&gt; == &lt;broker enforced read heart-beat timeout interval&gt;</strong></code></p><p>For backward compatibility, if the grace period multiplier is not configured the default enforcement mode remains strict, e.g.,&#160;<strong><code>transport.hbGracePeriodMultiplier=1.0</code></strong>. Attempts to configure the grace period multiplier to a value less than, or equal to 1.0 will be silently ignored.</p><p>STOMP clients that wish to be tolerant of late arriving heart-beats from the broker must implement their own solution for doing so.</p><ul><li>Please check the <a shape="rect" class="external-link" href="ht
 tp://stomp.github.io/stomp-specification-1.2.html#Heart-beating" rel="nofollow">STOMP specification</a> for the details on heart-beating</li><li>The JIRA that implemented this: <a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/AMQ-4674">ActiveMQ 5.x does not support the notion of a grace-period for heart beats as supported by the STOMP protocol</a></li></ul><h3 id="Stomp-WorkingwithDestinationswithStomp">Working with Destinations with Stomp</h3><p>Note that the prefix in stomp <strong><code>/queue/</code></strong> or&#160;<strong><code>/topic/</code></strong> is removed from the string before passing it to ActiveMQ as a JMS destination. Also note that the default separator in MOM systems is&#160;<strong><code>.</code></strong> (dot). So <strong><code>FOO.BAR</code></strong> is the normal syntax of a MOM queue - the Stomp equivalent would be <strong><code>/queue/FOO.BAR</code></strong></p><div class="confluence-information-macro confluence-information-
 macro-warning"><p class="title">Be careful about starting destinations with /</p><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>If in Stomp world you use&#160;<strong><code>/queue/foo/bar</code></strong> then in a JMS world the queue would be called <strong><code>foo/bar</code></strong> not&#160;<strong><code>/foo/bar</code></strong>.</p></div></div><h3 id="Stomp-PersistenceofStompmessages">Persistence of Stomp messages</h3><p>By default, Stomp produced messages are set to non-persistent. You have to explicitly tell your Stomp library to add&#160;<strong><code>persistent:true</code></strong> to all&#160;<strong><code>SEND</code></strong> requests, for any messages that you want to persist across ActiveMQ restarts. This is the opposite of the default for JMS submitted messages.</p><h3 id="Stomp-WorkingwithJMSText/BytesMessagesandStomp">Working with JMS Text/Bytes Messages and Stomp</h
 3><p>Stomp is a very simple protocol - that's part of the beauty of it! As such, it does not have knowledge of JMS messages such as&#160;<strong><code>TextMessage</code></strong>'s or <strong><code>BytesMessage</code></strong>'s. The protocol does however support a content-length header. To provide more robust interaction between Stomp and JMS clients, ActiveMQ keys off of the inclusion of this header to determine what message type to create when sending from Stomp to JMS. The logic is simple:</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Inclusion of content-length header</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Resulting Message</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>yes</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong><code>BytesMessage</code></strong></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>no</p></td><td cols
 pan="1" rowspan="1" class="confluenceTd"><p><strong><code>TextMessage</code></strong></p></td></tr></tbody></table></div><p>This same logic can be followed when going from JMS to Stomp, as well. A Stomp client could be written to key off of the inclusion of the content-length header to determine what type of message structure to provide to the user.</p><h3 id="Stomp-Messagetransformations">Message transformations</h3><p>The <strong><code>transformation</code></strong> message header on <strong><code>SEND</code></strong> and <strong><code>SUBSCRIBE</code></strong> messages could be used to instruct ActiveMQ to transform messages from text to the format of your desire. Currently, ActiveMQ comes with a transformer that can transform XML/JSON text to Java objects, but you can add your own transformers as well.</p><p>Here's a quick example of how to use built-in transformer (taken from test cases)</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelCont
 ent pdl">
+</div></div><p>This multiplier is used to calculate the effective read heart-beat timeout the broker will enforce for each client's connection. The multiplier is applied to the read-timeout interval the client specifies in its&#160;<strong><code>CONNECT</code></strong> frame:</p><p><code>&#160; <strong>&lt;client specified read heart-beat interval&gt; * &lt;grace periodmultiplier&gt; == &lt;broker enforced read heart-beat timeout interval&gt;</strong></code></p><p>For backward compatibility, if the grace period multiplier is not configured the default enforcement mode remains strict, e.g.,&#160;<strong><code>transport.hbGracePeriodMultiplier=1.0</code></strong>. Attempts to configure the grace period multiplier to a value less than, or equal to 1.0 will be silently ignored.</p><p>STOMP clients that wish to be tolerant of late arriving heart-beats from the broker must implement their own solution for doing so.</p><ul><li>Please check the <a shape="rect" class="external-link" href="ht
 tp://stomp.github.io/stomp-specification-1.2.html#Heart-beating" rel="nofollow">STOMP specification</a> for the details on heart-beating</li><li>The JIRA that implemented this: <a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/AMQ-4674">ActiveMQ 5.x does not support the notion of a grace-period for heart beats as supported by the STOMP protocol</a></li></ul><h3 id="Stomp-WorkingwithDestinationswithStomp">Working with Destinations with Stomp</h3><p>Note that the prefix in stomp <strong><code>/queue/</code></strong> or&#160;<strong><code>/topic/</code></strong> is removed from the string before passing it to ActiveMQ as a JMS destination. Also note that the default separator in MOM systems is&#160;<strong><code>.</code></strong> (dot). Whilst <strong><code>FOO.BAR</code></strong> is the normal syntax to identify a queue type destination the Stomp equivalent is <strong><code>/queue/FOO.BAR</code></strong></p><div class="confluence-information-macro confl
 uence-information-macro-warning"><p class="title">Be careful about starting destinations with /</p><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>If in Stomp world you use&#160;<strong><code>/queue/foo/bar</code></strong> then in a JMS world the queue would be called <strong><code>foo/bar</code></strong> not&#160;<strong><code>/foo/bar</code></strong>.</p></div></div><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Persistent Messaging in STOMP</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body">STOMP messages are non-persistent by default. To use persistent messaging add the following STOMP header to all&#160;<strong><code>SEND</code></strong> requests: <strong><code>persistent:true</code></strong>. This default is the opposite of that for
  JMS messages.</div></div><h3 id="Stomp-WorkingwithJMSText/BytesMessagesandStomp">Working with JMS Text/Bytes Messages and Stomp</h3><p>Stomp is a very simple protocol - that's part of the beauty of it! As such, it does not have knowledge of JMS messages such as&#160;<strong><code>TextMessage</code></strong>'s or <strong><code>BytesMessage</code></strong>'s. The protocol does however support a&#160;<strong><code>content-length</code></strong> header. To provide more robust interaction between STOMP and JMS clients, ActiveMQ keys off of the inclusion of this header to determine what message type to create when sending from Stomp to JMS. The logic is simple:</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Inclusion of content-length header</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Resulting Message</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>yes</p></td><td colspan="1" r
 owspan="1" class="confluenceTd"><p><strong><code>BytesMessage</code></strong></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>no</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><strong><code>TextMessage</code></strong></p></td></tr></tbody></table></div><p>This same logic can be followed when going from JMS to Stomp, as well. A Stomp client could be written to key off of the inclusion of the content-length header to determine what type of message structure to provide to the user.</p><h3 id="Stomp-Messagetransformations">Message transformations</h3><p>The <strong><code>transformation</code></strong> message header on <strong><code>SEND</code></strong> and <strong><code>SUBSCRIBE</code></strong> messages could be used to instruct ActiveMQ to transform messages from text to the format of your desire. Currently, ActiveMQ comes with a transformer that can transform XML/JSON text to Java objects, but you can add your own transformers as well.</p><p>Here's 
 a quick example of how to use built-in transformer (taken from test cases)</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">    private String xmlObject = "&lt;pojo&gt;\n" 
             + "  &lt;name&gt;Dejan&lt;/name&gt;\n"
             + "  &lt;city&gt;Belgrade&lt;/city&gt;\n"