Modified: websites/production/activemq/content/ldap-broker-discovery-mechanism.html ============================================================================== --- websites/production/activemq/content/ldap-broker-discovery-mechanism.html (original) +++ websites/production/activemq/content/ldap-broker-discovery-mechanism.html Sat Jun 27 21:23:55 2015 @@ -32,16 +32,6 @@ </style> <![endif]--> - <link href='http://activemq.apache.org/styles/highlighter/styles/shCore.css' rel='stylesheet' type='text/css' /> - <link href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css' rel='stylesheet' type='text/css' /> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js' type='text/javascript'></script> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js' type='text/javascript'></script> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shBrushXml.js' type='text/javascript'></script> - - <script type="text/javascript"> - SyntaxHighlighter.defaults['toolbar'] = false; - SyntaxHighlighter.all(); - </script> <title> Apache ActiveMQ ™ -- LDAP Broker Discovery Mechanism @@ -83,25 +73,18 @@ <tr> <td valign="top" width="100%"> <div class="wiki-content maincontent"><p>Configuring network topologies can be quite tedious when the number of brokers in the system is large. To help ease the configuration overhead for these types of situations, a broker can be configured to look up its broker connections using a LDAP v3 directory server.</p> - <div class="aui-message problem shadowed information-macro"> - <p class="title">Note</p> - <span class="aui-icon icon-problem">Icon</span> - <div class="message-content"> - -<p>The basic feature was added to satisfy <span style="text-decoration: line-through;"><a shape="rect" class="external-link" href="https://issues.apache.org/activemq/browse/AMQ-358">AMQ-358</a></span>. There are known problems and limitations with this implementation. These deficiencies have been addressed in <a shape="rect" class="external-link" href="https://issues.apache.org/activemq/browse/AMQ-1587">AMQ-1587</a>. The features discussed on this page require the patch attached to JIRA issue <a shape="rect" class="external-link" href="https://issues.apache.org/activemq/browse/AMQ-1587">AMQ-1587</a>. This patch should apply cleanly to the ActiveMQ 5.0.0 release or the current development trunk.</p> - </div> - </div> - +<div class="confluence-information-macro confluence-information-macro-warning"><p class="title">Note</p><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body"> +<p>The basic feature was added to satisfy <span style="text-decoration: line-through;"><a shape="rect" class="external-link" href="https://issues.apache.org/activemq/browse/AMQ-358">AMQ-358</a></span>. There are known problems and limitations with this implementation. These deficiencies have been addressed in <a shape="rect" class="external-link" href="https://issues.apache.org/activemq/browse/AMQ-1587">AMQ-1587</a>. The features discussed on this page require the patch attached to JIRA issue <a shape="rect" class="external-link" href="https://issues.apache.org/activemq/browse/AMQ-1587">AMQ-1587</a>. This patch should apply cleanly to the ActiveMQ 5.0.0 release or the current development trunk.</p></div></div> <h2 id="LDAPBrokerDiscoveryMechanism-LDAPv3DirectoryServerCompliance">LDAP v3 Directory Server Compliance</h2> <p>The following table lists a known subset of directory servers and their compliance to work with the LDAP discovery feature. Most LDAP v3 directory servers will support this feature if they properly implement the <a shape="rect" class="external-link" href="http://www.ietf.org/rfc/rfc2307.txt" rel="nofollow">RFC2307</a> schemas. In order to support the persistent search capabilities the server must implement the extension defined in <a shape="rect" class="external-link" href="http://www.ietf.org/proceedings/01aug/I-D/draft-ietf-ldapext-psearch-03.txt" rel="nofollow">draft-ietf-ldapext-psearch-03.txt</a>.</p> -<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p> Vendor </p></th><th colspan="1" rowspan="1" class="confluenceTh"><p> Product </p></th><th colspan="1" rowspan="1" class="confluenceTh"><p> Version </p></th><th colspan="1" rowspan="1" class="confluenceTh"><p> <a shape="rect" class="external-link" href="http://www.ietf.org/rfc/rfc2307.txt" rel="nofollow">RFC2307</a> </p></th><th colspan="1" rowspan="1" class="confluenceTh"><p> <a shape="rect" class="external-link" href="http://www.ietf.org/proceedings/01aug/I-D/draft-ietf-ldapext-psearch-03.txt" rel="nofollow">draft-ietf-ldapext-psearch-03.txt</a> </p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> Apache </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> ApacheDS </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> 1.0.x </p></td><td colspan="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emoticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"></div> </td><td colspan="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emoticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"></div> </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> Microsoft </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Active Directory </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Windows 2000 <br clear="none" class="atl-forced-newline"> -Windows 2003 </p></td><td colspan="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emoticon-warning" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/warning.png" data-emoticon-name="warning" alt="(warning)"></div> </td><td colspan="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emoticon-cross" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/error.png" data-emoticon-name="cross" alt="(error)"></div> </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> Microsoft </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Active Directory </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Windows 2003 R2 </p></td><td colspan="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emo ticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"></div> </td><td colspan="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emoticon-cross" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/error.png" data-emoticon-name="cross" alt="(error)"></div> </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> Sun </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> OpenDS </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> 0.9.x </p></td><td colspan="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emoticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/check.png" data-e moticon-name="tick" alt="(tick)"></div> </td><td colspan="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emoticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"></div> </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> OpenLDAP </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> OpenLDAP </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> 2.3.x <br clear="none" class="atl-forced-newline"> -2.4.x </p></td><td colspan="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emoticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"></div> </td><td colspan="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emoticon-cross" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/error.png" data-emoticon-name="cross" alt="(error)"></div> </td></tr></tbody></table></div> +<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p> Vendor </p></th><th colspan="1" rowspan="1" class="confluenceTh"><p> Product </p></th><th colspan="1" rowspan="1" class="confluenceTh"><p> Version </p></th><th colspan="1" rowspan="1" class="confluenceTh"><p> <a shape="rect" class="external-link" href="http://www.ietf.org/rfc/rfc2307.txt" rel="nofollow">RFC2307</a> </p></th><th colspan="1" rowspan="1" class="confluenceTh"><p> <a shape="rect" class="external-link" href="http://www.ietf.org/proceedings/01aug/I-D/draft-ietf-ldapext-psearch-03.txt" rel="nofollow">draft-ietf-ldapext-psearch-03.txt</a> </p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> Apache </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> ApacheDS </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> 1.0.x </p></td><td colspan="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emoticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"></div> </td><td colspan="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emoticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"></div> </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> Microsoft </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Active Directory </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Windows 2000 <br clear="none" class="atl-forced-newline"> +Windows 2003 </p></td><td colspan="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emoticon-warning" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/warning.png" data-emoticon-name="warning" alt="(warning)"></div> </td><td colspan="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emoticon-cross" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/error.png" data-emoticon-name="cross" alt="(error)"></div> </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> Microsoft </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Active Directory </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Windows 2003 R2 </p></td><td colspan="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emoticon-tick" src="https ://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"></div> </td><td colspan="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emoticon-cross" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/error.png" data-emoticon-name="cross" alt="(error)"></div> </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> Sun </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> OpenDS </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> 0.9.x </p></td><td colspan="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emoticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"></div> </td><td colspa n="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emoticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"></div> </td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> OpenLDAP </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> OpenLDAP </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> 2.3.x <br clear="none" class="atl-forced-newline"> +2.4.x </p></td><td colspan="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emoticon-tick" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/check.png" data-emoticon-name="tick" alt="(tick)"></div> </td><td colspan="1" rowspan="1" class="confluenceTd"> <div align="center" class=""><img class="emoticon emoticon-cross" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/error.png" data-emoticon-name="cross" alt="(error)"></div> </td></tr></tbody></table></div> -<p><img class="emoticon emoticon-warning" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/warning.png" data-emoticon-name="warning" alt="(warning)"> LDAP v3 directory server which do not support <a shape="rect" class="external-link" href="http://www.ietf.org/rfc/rfc2307.txt" rel="nofollow">RFC2307</a> by default. Support can be added by manually importing them. See vendor specific setup requirements on how to do this.<br clear="none"> -<img class="emoticon emoticon-cross" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/error.png" data-emoticon-name="cross" alt="(error)"> LDAP v3 directory servers which do not support the <a shape="rect" class="external-link" href="http://www.ietf.org/proceedings/01aug/I-D/draft-ietf-ldapext-psearch-03.txt" rel="nofollow">draft-ietf-ldapext-psearch-03.txt</a>.</p> +<p><img class="emoticon emoticon-warning" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/warning.png" data-emoticon-name="warning" alt="(warning)"> LDAP v3 directory server which do not support <a shape="rect" class="external-link" href="http://www.ietf.org/rfc/rfc2307.txt" rel="nofollow">RFC2307</a> by default. Support can be added by manually importing them. See vendor specific setup requirements on how to do this.<br clear="none"> +<img class="emoticon emoticon-cross" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/error.png" data-emoticon-name="cross" alt="(error)"> LDAP v3 directory servers which do not support the <a shape="rect" class="external-link" href="http://www.ietf.org/proceedings/01aug/I-D/draft-ietf-ldapext-psearch-03.txt" rel="nofollow">draft-ietf-ldapext-psearch-03.txt</a>.</p> <h2 id="LDAPBrokerDiscoveryMechanism-LDAPNetworkConnectorProperties">LDAP Network Connector Properties</h2> @@ -110,25 +93,18 @@ Windows 2003 </p></td><td colspan="1" ro ONELEVEL_SCOPE - search one level of the base. <br clear="none" class="atl-forced-newline"> SUBTREE_SCOPE - search entire subtree rooted at the base. </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> searchFilter </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> (&(objectClass=ipHost)(objectClass=ipService)) </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> No </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> Can be any filter that conforms to <a shape="rect" class="external-link" href="http://www.ietf.org/rfc/rfc2254.txt" rel="nofollow">RFC2254</a>. If a custom one is specified the actual search filter used will be (&(&(objectClass=ipHost)(objectClass=ipService))(USER CUSTOM)) </p></td></tr></tbody></table></div> - <div class="aui-message hint shadowed information-macro"> - <p class="title">Other Properties</p> - <span class="aui-icon icon-hint">Icon</span> - <div class="message-content"> - -<p>All of the properties defined in <a shape="rect" class="external-link" href="http://activemq.apache.org/networks-of-brokers.html">Networks of Brokers</a> are also available to the ldapNetworkConnector. Any of the properties defined for a normal networkConnector will be used as connection parameters to any discovered brokers matching the search criteria.</p> - </div> - </div> - +<div class="confluence-information-macro confluence-information-macro-information"><p class="title">Other Properties</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"> +<p>All of the properties defined in <a shape="rect" class="external-link" href="http://activemq.apache.org/networks-of-brokers.html">Networks of Brokers</a> are also available to the ldapNetworkConnector. Any of the properties defined for a normal networkConnector will be used as connection parameters to any discovered brokers matching the search criteria.</p></div></div> <h2 id="LDAPBrokerDiscoveryMechanism-Example1:SimpleNetworkofBrokers">Example 1: Simple Network of Brokers</h2> <div align="center" class=""> <h3 id="LDAPBrokerDiscoveryMechanism-NetworkConfiguration">Network Configuration</h3> -<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Topology </p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>LDAP v3 Directory Structure</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Entry</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><img class="confluence-embedded-image" src="ldap-broker-discovery-mechanism.data/Example1-Topology.jpg" data-image-src="/confluence/download/attachments/77126/Example1-Topology.jpg?version=4&modificationDate=1203881427000&api=v2"></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><img class="confluence-embedded-image" src="ldap-broker-discovery-mechanism.data/Example1-DirectoryStructure.jpg" data-image-src="/confluence/download/attachments/77126/Example1-DirectoryStructure.jpg?version=1&modificationDate=1203881557000&api=v2"></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><img class="confluence-embed ded-image" src="ldap-broker-discovery-mechanism.data/Example1-Entry.jpg" data-image-src="/confluence/download/attachments/77126/Example1-Entry.jpg?version=1&modificationDate=1203881408000&api=v2"></p></td></tr></tbody></table></div> +<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Topology </p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>LDAP v3 Directory Structure</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Entry</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="ldap-broker-discovery-mechanism.data/Example1-Topology.jpg" data-image-src="/confluence/download/attachments/77126/Example1-Topology.jpg?version=4&modificationDate=1203881427000&api=v2" data-unresolved-comment-count="0" data-linked-resource-id="59671452" data-linked-resource-version="4" data-linked-resource-type="attachment" data-linked-resource-default-alias="Example1-Topology.jpg" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/jpeg" data-linked-resource-container-id="77126" data-linked-resource -container-version="21"></span></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="ldap-broker-discovery-mechanism.data/Example1-DirectoryStructure.jpg" data-image-src="/confluence/download/attachments/77126/Example1-DirectoryStructure.jpg?version=1&modificationDate=1203881557000&api=v2" data-unresolved-comment-count="0" data-linked-resource-id="59671497" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="Example1-DirectoryStructure.jpg" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/jpeg" data-linked-resource-container-id="77126" data-linked-resource-container-version="21"></span></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="ldap-broker-discovery-mechanism.data/Example1- Entry.jpg" data-image-src="/confluence/download/attachments/77126/Example1-Entry.jpg?version=1&modificationDate=1203881408000&api=v2" data-unresolved-comment-count="0" data-linked-resource-id="59671496" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="Example1-Entry.jpg" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/jpeg" data-linked-resource-container-id="77126" data-linked-resource-container-version="21"></span></p></td></tr></tbody></table></div> <h3 id="LDAPBrokerDiscoveryMechanism-ActiveMQConfiguration(activemq.xml)">ActiveMQ Configuration (activemq.xml)</h3></div> <div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>srv-a.mydomain.com</b></div><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ <broker brokerName="srv-a.mydomain.com" ...> ... @@ -146,7 +122,7 @@ Windows 2003 </p></td><td colspan="1" ro ]]></script> </div></div> <div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>srv-b.mydomain.com</b></div><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ <broker brokerName="srv-b.mydomain.com" ...> ... @@ -162,12 +138,12 @@ Windows 2003 </p></td><td colspan="1" ro <h2 id="LDAPBrokerDiscoveryMechanism-Example2:LargerNetworkofBrokers">Example 2: Larger Network of Brokers</h2> <div align="center" class=""> <h3 id="LDAPBrokerDiscoveryMechanism-NetworkConfiguration.1">Network Configuration</h3> -<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Topology </p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>LDAP v3 Directory Structure</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><img class="confluence-embedded-image" src="ldap-broker-discovery-mechanism.data/Example2-Topology.jpg" data-image-src="/confluence/download/attachments/77126/Example2-Topology.jpg?version=2&modificationDate=1203881712000&api=v2"></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><img class="confluence-embedded-image" src="ldap-broker-discovery-mechanism.data/Example2-DirectoryStructure.jpg" data-image-src="/confluence/download/attachments/77126/Example2-DirectoryStructure.jpg?version=1&modificationDate=1203882106000&api=v2"></p></td></tr></tbody></table></div> +<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Topology </p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>LDAP v3 Directory Structure</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="ldap-broker-discovery-mechanism.data/Example2-Topology.jpg" data-image-src="/confluence/download/attachments/77126/Example2-Topology.jpg?version=2&modificationDate=1203881712000&api=v2" data-unresolved-comment-count="0" data-linked-resource-id="59671455" data-linked-resource-version="2" data-linked-resource-type="attachment" data-linked-resource-default-alias="Example2-Topology.jpg" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/jpeg" data-linked-resource-container-id="77126" data-linked-resource-container-version="21"></span></p></td><td colspan="1" rowspan="1 " class="confluenceTd"><p><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image" src="ldap-broker-discovery-mechanism.data/Example2-DirectoryStructure.jpg" data-image-src="/confluence/download/attachments/77126/Example2-DirectoryStructure.jpg?version=1&modificationDate=1203882106000&api=v2" data-unresolved-comment-count="0" data-linked-resource-id="59671498" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="Example2-DirectoryStructure.jpg" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/jpeg" data-linked-resource-container-id="77126" data-linked-resource-container-version="21"></span></p></td></tr></tbody></table></div> <h3 id="LDAPBrokerDiscoveryMechanism-ActiveMQConfiguration(activemq.xml).1">ActiveMQ Configuration (activemq.xml)</h3></div> <div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>srv-a.mydomain.com</b></div><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ <broker brokerName="srv-a.mydomain.com" ...> ... @@ -187,7 +163,7 @@ Windows 2003 </p></td><td colspan="1" ro ]]></script> </div></div> <div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>srv-b.mydomain.com</b></div><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ <broker brokerName="srv-b.mydomain.com" ...> ... @@ -205,7 +181,7 @@ Windows 2003 </p></td><td colspan="1" ro ]]></script> </div></div> <div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>srv-c.mydomain.com</b></div><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ <broker brokerName="srv-c.mydomain.com" ...> ... @@ -218,7 +194,7 @@ Windows 2003 </p></td><td colspan="1" ro ]]></script> </div></div> <div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>srv-d.mydomain.com</b></div><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ <broker brokerName="srv-d.mydomain.com" ...> ...
Modified: websites/production/activemq/content/leveldb-store.html ============================================================================== --- websites/production/activemq/content/leveldb-store.html (original) +++ websites/production/activemq/content/leveldb-store.html Sat Jun 27 21:23:55 2015 @@ -32,15 +32,6 @@ </style> <![endif]--> - <link href='http://activemq.apache.org/styles/highlighter/styles/shCore.css' rel='stylesheet' type='text/css' /> - <link href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css' rel='stylesheet' type='text/css' /> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js' type='text/javascript'></script> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js' type='text/javascript'></script> - - <script type="text/javascript"> - SyntaxHighlighter.defaults['toolbar'] = false; - SyntaxHighlighter.all(); - </script> <title> Apache ActiveMQ ™ -- LevelDB Store @@ -81,15 +72,8 @@ <tbody> <tr> <td valign="top" width="100%"> -<div class="wiki-content maincontent"> <div class="aui-message hint shadowed information-macro"> - <p class="title">Version Compatibility</p> - <span class="aui-icon icon-hint">Icon</span> - <div class="message-content"> - <p>Available in ActiveMQ 5.8.0 and newer</p> - </div> - </div> -<p>The LevelDB Store is a file based persistence database that is local to the message broker that is using it. It has been optimized to provide even faster persistence than KahaDB. It's similar to KahahDB but instead of using a custom B-Tree implementation to index the write ahead logs, it uses <a shape="rect" class="external-link" href="https://code.google.com/p/leveldb/" rel="nofollow">LevelDB</a> based indexes which have several nice properties due to the 'append only' files access patterns :</p><ul><li>Fast updates (No need to do random disk updates)</li><li>Concurrent reads</li><li>Fast index snapshots using hard links</li></ul><p>Both KahaDB and the LevelDB store have to do periodic garbage collection cycles to determine which log files can deleted. In the case of KahaDB, this can be quite expensive as you increase the amount of data stored and can cause read/write stalls while the collection occurs. The LevelDB store uses a much cheaper algorithm to determine when log files can be collected and avoids those stalls.</p><h2 id="LevelDBStore-Configuration">Configuration</h2><p>You can configure ActiveMQ to use LevelDB for its persistence adapter - like below :</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ <broker brokerName="broker" ... > +<div class="wiki-content maincontent"><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Version Compatibility</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Available in ActiveMQ 5.8.0 and newer</p></div></div><p>The LevelDB Store is a file based persistence database that is local to the message broker that is using it. It has been optimized to provide even faster persistence than KahaDB. It's similar to KahahDB but instead of using a custom B-Tree implementation to index the write ahead logs, it uses <a shape="rect" class="external-link" href="https://code.google.com/p/leveldb/" rel="nofollow">LevelDB</a> based indexes which have several nice properties due to the 'append only' files access patterns :</p><ul><li>Fast updates (No need to do random disk updates)</li><li>Concurrent reads</li><li>Fast index snapshots using hard links</ li></ul><p>Both KahaDB and the LevelDB store have to do periodic garbage collection cycles to determine which log files can deleted. In the case of KahaDB, this can be quite expensive as you increase the amount of data stored and can cause read/write stalls while the collection occurs. The LevelDB store uses a much cheaper algorithm to determine when log files can be collected and avoids those stalls.</p><h2 id="LevelDBStore-Configuration">Configuration</h2><p>You can configure ActiveMQ to use LevelDB for its persistence adapter - like below :</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ <broker brokerName="broker" ... > ... <persistenceAdapter> <levelDB directory="activemq-data"/> Modified: websites/production/activemq/content/life-cycle.html ============================================================================== --- websites/production/activemq/content/life-cycle.html (original) +++ websites/production/activemq/content/life-cycle.html Sat Jun 27 21:23:55 2015 @@ -32,15 +32,6 @@ </style> <![endif]--> - <link href='http://activemq.apache.org/styles/highlighter/styles/shCore.css' rel='stylesheet' type='text/css' /> - <link href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css' rel='stylesheet' type='text/css' /> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js' type='text/javascript'></script> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js' type='text/javascript'></script> - - <script type="text/javascript"> - SyntaxHighlighter.defaults['toolbar'] = false; - SyntaxHighlighter.all(); - </script> <title> Apache ActiveMQ ™ -- Life Cycle @@ -91,7 +82,7 @@ <p> you can explicitly initialize a Channel by invoking its init() method. At this point its Configuration is set</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ BlazeChannelFactory factory = new BlazeChannelFactory(); BlazeChannel channel = factory.createChannel(); channel.init(); @@ -102,7 +93,7 @@ <p> this will implicitly initialize the channel and start the Channel's underlying communication with its peers:</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ BlazeChannelFactory factory = new BlazeChannelFactory(); BlazeChannel channel = factory.createChannel(); channel.start(); @@ -113,7 +104,7 @@ <p> this will stop communication - however you are able to re-start the channel at a latter point</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ BlazeChannelFactory factory = new BlazeChannelFactory(); BlazeChannel channel = factory.createChannel(); channel.stop(); @@ -129,7 +120,7 @@ <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ BlazeChannelFactory factory = new BlazeChannelFactory(); BlazeChannel channel = factory.createChannel(); channel.shutDown(); Modified: websites/production/activemq/content/load-testing-with-camel.html ============================================================================== --- websites/production/activemq/content/load-testing-with-camel.html (original) +++ websites/production/activemq/content/load-testing-with-camel.html Sat Jun 27 21:23:55 2015 @@ -32,15 +32,6 @@ </style> <![endif]--> - <link href='http://activemq.apache.org/styles/highlighter/styles/shCore.css' rel='stylesheet' type='text/css' /> - <link href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css' rel='stylesheet' type='text/css' /> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js' type='text/javascript'></script> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js' type='text/javascript'></script> - - <script type="text/javascript"> - SyntaxHighlighter.defaults['toolbar'] = false; - SyntaxHighlighter.all(); - </script> <title> Apache ActiveMQ ™ -- Load Testing with Camel @@ -90,7 +81,7 @@ <p>Now to run a load test type</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ activemq/activemq-camel-loadtest> mvn test -Dtest=LocalBrokerParallelProducerLoadTest ]]></script> </div></div> Modified: websites/production/activemq/content/log4j-warn-no-appenders-could-be-found-for-logger.html ============================================================================== --- websites/production/activemq/content/log4j-warn-no-appenders-could-be-found-for-logger.html (original) +++ websites/production/activemq/content/log4j-warn-no-appenders-could-be-found-for-logger.html Sat Jun 27 21:23:55 2015 @@ -32,15 +32,6 @@ </style> <![endif]--> - <link href='http://activemq.apache.org/styles/highlighter/styles/shCore.css' rel='stylesheet' type='text/css' /> - <link href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css' rel='stylesheet' type='text/css' /> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js' type='text/javascript'></script> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js' type='text/javascript'></script> - - <script type="text/javascript"> - SyntaxHighlighter.defaults['toolbar'] = false; - SyntaxHighlighter.all(); - </script> <title> Apache ActiveMQ ™ -- log4j-WARN No appenders could be found for logger @@ -84,7 +75,7 @@ <div class="wiki-content maincontent"><h2 id="log4j-WARNNoappenderscouldbefoundforlogger-Error">Error</h2> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ log4j:WARN No appenders could be found for logger (org.activemq.transport.tcp.TcpTransportChannel). log4j:WARN Please initialize the log4j system properly. Modified: websites/production/activemq/content/logging-a-warning-if-you-forget-to-start-a-connection.html ============================================================================== --- websites/production/activemq/content/logging-a-warning-if-you-forget-to-start-a-connection.html (original) +++ websites/production/activemq/content/logging-a-warning-if-you-forget-to-start-a-connection.html Sat Jun 27 21:23:55 2015 @@ -74,7 +74,7 @@ <td valign="top" width="100%"> <div class="wiki-content maincontent"><h2 id="LoggingawarningifyouforgettostartaConnection-LoggingawarningifyouforgettostartaConnection">Logging a warning if you forget to start a Connection</h2> -<p>A <em>very</em> common gotcha when working with JMS is forgetting to start the JMS connection, creating a consumer and not having it receive any messages. I myself have tripped up over this one many many times! <img class="emoticon emoticon-smile" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/smile.png" data-emoticon-name="smile" alt="(smile)"></p> +<p>A <em>very</em> common gotcha when working with JMS is forgetting to start the JMS connection, creating a consumer and not having it receive any messages. I myself have tripped up over this one many many times! <img class="emoticon emoticon-smile" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/smile.png" data-emoticon-name="smile" alt="(smile)"></p> <p>To try and help diagnose this mistake and give you an early warning by default ActiveMQ 4.2 detects this and generates a handy warning message telling you to call the <a shape="rect" class="external-link" href="http://java.sun.com/j2ee/1.4/docs/api/javax/jms/Connection.html#start()" rel="nofollow">Connection.start() method</a> on the JMS connection.</p> Modified: websites/production/activemq/content/logging-interceptor.html ============================================================================== --- websites/production/activemq/content/logging-interceptor.html (original) +++ websites/production/activemq/content/logging-interceptor.html Sat Jun 27 21:23:55 2015 @@ -32,17 +32,6 @@ </style> <![endif]--> - <link href='http://activemq.apache.org/styles/highlighter/styles/shCore.css' rel='stylesheet' type='text/css' /> - <link href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css' rel='stylesheet' type='text/css' /> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js' type='text/javascript'></script> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js' type='text/javascript'></script> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shBrushXml.js' type='text/javascript'></script> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script> - - <script type="text/javascript"> - SyntaxHighlighter.defaults['toolbar'] = false; - SyntaxHighlighter.all(); - </script> <title> Apache ActiveMQ ™ -- Logging Interceptor @@ -84,7 +73,7 @@ <tr> <td valign="top" width="100%"> <div class="wiki-content maincontent"><h2 id="LoggingInterceptor-LoggingInterceptor">Logging Interceptor</h2><p>The Logging Interceptor is a pretty trivial <a shape="rect" href="interceptors.html">Interceptor</a> which just logs to <a shape="rect" class="external-link" href="http://jakarta.apache.org/commons/logging/">Jakarta Commons Logging</a> or <a shape="rect" class="external-link" href="http://logging.apache.org/log4j/docs/">log4j</a> as messages are sent or acknowledged on a broker.</p><p>The default logging level used is <strong>INFO</strong>. If you want to increase/reduce the logging you can use <a shape="rect" href="how-do-i-change-the-logging.html">change it via commons logging or log4j</a>.</p><p>As of version 5.3 the logging Interceptor is more configurable. The idea is to log all events but be able to turn off logging for certain event groups by configuration.</p><p>Currently the following groups are supported:</p><div class="table-wrap"><table class="confluenceTable"> <tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p><strong>Attribute</strong></p></th><th colspan="1" rowspan="1" class="confluenceTh"><p><strong>Description</strong></p></th><th colspan="1" rowspan="1" class="confluenceTh"><p><strong>Default Value</strong></p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>logAll</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Log all Events</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>false</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>logConnectionEvents</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Events related to connections and sessions</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>true</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>logTransactionEvents</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Events related to transaction handling</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>fals e</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>logConsumerEvents</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Events related to consuming messages</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>false</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>logProducerEvents</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Events related to producing messages</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>false</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>logInternalEvents</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Events normally not of Interest for users like failover, querying internal objects etc</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>false</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>logSessionEvents</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Events related to adding and removing sessions</p ></td><td colspan="1" rowspan="1" >class="confluenceTd"><p>true</p></td></tr></tbody></table></div><p>Only >connection events logging is enabled by default.</p><p>You can enable the >logging interceptor using the following <a shape="rect" class="external-link" >href="http://svn.apache.org/repos/asf/activemq/trunk/activemq-unit-tests/src/test/resources/org/apache/activemq/util/plugin-broker.xml">XML > configuration</a>. This example enables all logging and disables the >connection event logging:</p><div class="code panel pdl" style="border-width: >1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ <beans xmlns="http://www.springframework.org/schema/beans" xmlns:amq="http://activemq.apache.org/schema/core" Modified: websites/production/activemq/content/manage-durable-subscribers.html ============================================================================== --- websites/production/activemq/content/manage-durable-subscribers.html (original) +++ websites/production/activemq/content/manage-durable-subscribers.html Sat Jun 27 21:23:55 2015 @@ -32,15 +32,6 @@ </style> <![endif]--> - <link href='http://activemq.apache.org/styles/highlighter/styles/shCore.css' rel='stylesheet' type='text/css' /> - <link href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css' rel='stylesheet' type='text/css' /> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js' type='text/javascript'></script> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js' type='text/javascript'></script> - - <script type="text/javascript"> - SyntaxHighlighter.defaults['toolbar'] = false; - SyntaxHighlighter.all(); - </script> <title> Apache ActiveMQ ™ -- Manage Durable Subscribers @@ -92,7 +83,7 @@ <p>Some applications send message with specified time to live. If those messages are kept on the broker for the offline durable subscriber we need to remove them when they reach their expiry time. Just as we do with queues, now we check for those messages every 30 seconds by default, which can be tuned with the appropriate <a shape="rect" href="per-destination-policies.html">destination policy</a>. For example, the following entry</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[<policyEntry topic=">" expireMessagesPeriod="300000"/>]]></script> +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[<policyEntry topic=">" expireMessagesPeriod="300000"/>]]></script> </div></div> <p>will configure the broker to check for expired messages every 5 minutes.</p> @@ -107,7 +98,7 @@ <p>An example configuration could look like</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[<broker name="localhost" offlineDurableSubscriberTimeout="86400000" offlineDurableSubscriberTaskSchedule="3600000">]]></script> +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[<broker name="localhost" offlineDurableSubscriberTimeout="86400000" offlineDurableSubscriberTaskSchedule="3600000">]]></script> </div></div> <p>which means that we check every hour and remove subscriber that has been offline for a day.</p></div> Modified: websites/production/activemq/content/maven2-activemq-broker-plugin.html ============================================================================== --- websites/production/activemq/content/maven2-activemq-broker-plugin.html (original) +++ websites/production/activemq/content/maven2-activemq-broker-plugin.html Sat Jun 27 21:23:55 2015 @@ -32,15 +32,6 @@ </style> <![endif]--> - <link href='http://activemq.apache.org/styles/highlighter/styles/shCore.css' rel='stylesheet' type='text/css' /> - <link href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css' rel='stylesheet' type='text/css' /> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js' type='text/javascript'></script> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js' type='text/javascript'></script> - - <script type="text/javascript"> - SyntaxHighlighter.defaults['toolbar'] = false; - SyntaxHighlighter.all(); - </script> <title> Apache ActiveMQ ™ -- Maven2 ActiveMQ Broker Plugin @@ -85,21 +76,14 @@ <h3 id="Maven2ActiveMQBrokerPlugin-HowtoUse"> How to Use</h3> - <div class="aui-message hint shadowed information-macro"> - <p class="title">Be Careful</p> - <span class="aui-icon icon-hint">Icon</span> - <div class="message-content"> - -<p>The maven plugins in ActiveMQ have been renamed in version 5.8.0+ to better follow the Maven plugin naming conventions. The ActiveMQ Broker plugin has changed from 'maven-activemq-plugin' to 'activemq-maven-plugin'.</p> - </div> - </div> - +<div class="confluence-information-macro confluence-information-macro-information"><p class="title">Be Careful</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"> +<p>The maven plugins in ActiveMQ have been renamed in version 5.8.0+ to better follow the Maven plugin naming conventions. The ActiveMQ Broker plugin has changed from 'maven-activemq-plugin' to 'activemq-maven-plugin'.</p></div></div> <blockquote><p>Replace the 5.7.0 version string with the version of your choosing, eg: 5.6.0, 5.8-SNAPSHOT</p></blockquote> <p>In your Maven2 project, or using a minimal pom.xml like the following:</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[<?xml version="1.0" encoding="UTF-8"?> +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[<?xml version="1.0" encoding="UTF-8"?> <project> <modelVersion>4.0.0</modelVersion> <groupId>com.acme</groupId> @@ -109,7 +93,7 @@ </div></div> <p>just type:</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ mvn org.apache.activemq.tooling:maven-activemq-plugin:5.1:run ]]></script> </div></div> @@ -119,7 +103,7 @@ <p>If you require a more advanced configuration with spring support, the jetty webconsole or with embedded camel you can add the plugin in your pom.xml and provide the required optional dependencies. For the default <code>conf/activemq.xml</code>, the following dependencies are required :</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ <build> <plugins> <plugin> @@ -164,7 +148,7 @@ </div></div> <p> and run it using:</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ mvn activemq:run ]]></script> </div></div> Modified: websites/production/activemq/content/mdc-logging.html ============================================================================== --- websites/production/activemq/content/mdc-logging.html (original) +++ websites/production/activemq/content/mdc-logging.html Sat Jun 27 21:23:55 2015 @@ -32,15 +32,6 @@ </style> <![endif]--> - <link href='http://activemq.apache.org/styles/highlighter/styles/shCore.css' rel='stylesheet' type='text/css' /> - <link href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css' rel='stylesheet' type='text/css' /> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js' type='text/javascript'></script> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js' type='text/javascript'></script> - - <script type="text/javascript"> - SyntaxHighlighter.defaults['toolbar'] = false; - SyntaxHighlighter.all(); - </script> <title> Apache ActiveMQ ™ -- MDC Logging @@ -92,13 +83,13 @@ See more details about MDC logging in th <p>For example if you use log format like</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[log4j.appender.stdout.layout.ConversionPattern=%d [%-15.15t] - %-5p %-30.30c{1} - %-10.10X{activemq.broker} %-20.20X{activemq.connector} %-20.20X{activemq.destination} - %m%n]]></script> +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[log4j.appender.stdout.layout.ConversionPattern=%d [%-15.15t] - %-5p %-30.30c{1} - %-10.10X{activemq.broker} %-20.20X{activemq.connector} %-20.20X{activemq.destination} - %m%n]]></script> </div></div> <p>in an environment where multiple brokers use the same log (like unit tests), you can expect the output similar to this one</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ 2011-03-23 13:51:04,919 [127.0.0.1:58146] - TRACE Queue - broker-3B tcp://localhost:6111 - Message ID:dejan-bosanacs-macbook-pro.... 2011-03-23 13:51:04,935 [oker-3B] Task-1] - DEBUG Queue - broker-3B tcp://localhost:6111 PROD.FUSESOURCE.3.B - PROD.FUSESOURCE.3.B toPageIn: 1, Inflight... Modified: websites/production/activemq/content/message-cursors.html ============================================================================== --- websites/production/activemq/content/message-cursors.html (original) +++ websites/production/activemq/content/message-cursors.html Sat Jun 27 21:23:55 2015 @@ -32,15 +32,6 @@ </style> <![endif]--> - <link href='http://activemq.apache.org/styles/highlighter/styles/shCore.css' rel='stylesheet' type='text/css' /> - <link href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css' rel='stylesheet' type='text/css' /> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js' type='text/javascript'></script> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js' type='text/javascript'></script> - - <script type="text/javascript"> - SyntaxHighlighter.defaults['toolbar'] = false; - SyntaxHighlighter.all(); - </script> <title> Apache ActiveMQ ™ -- Message Cursors @@ -93,8 +84,8 @@ <p>ActiveMQ 5.0 takes a hybrid approach, allowing messages to pass from producer to consumer directly (after the messages have been persisted), but switches back to using cursors if the consumer(s) fall behind.</p> -<p>When Message Consumers are both active and fast - keeping up with the Message Producer(s) - messages are stored and then passed to a dispatch queue in the broker associated with the Consumer: <img class="confluence-embedded-image image-center" src="message-cursors.data/DispatchFastConsumers.png" data-image-src="/confluence/download/attachments/48811/DispatchFastConsumers.png?version=1&modificationDate=1193437635000&api=v2"><br clear="none"> -If a Consumer becomes active after messages are pending from the store for it, or it's slower than the producer, then messages are paged in to the dispatch queue from a pending cursor: <img class="confluence-embedded-image image-center" src="message-cursors.data/DispatchSlowConsumers.png" data-image-src="/confluence/download/attachments/48811/DispatchSlowConsumers.png?version=1&modificationDate=1193437656000&api=v2"></p> +<p>When Message Consumers are both active and fast - keeping up with the Message Producer(s) - messages are stored and then passed to a dispatch queue in the broker associated with the Consumer: <span class="confluence-embedded-file-wrapper image-center-wrapper"><img class="confluence-embedded-image image-center" src="message-cursors.data/DispatchFastConsumers.png" data-image-src="/confluence/download/attachments/48811/DispatchFastConsumers.png?version=1&modificationDate=1193437635000&api=v2" data-unresolved-comment-count="0" data-linked-resource-id="59670893" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="DispatchFastConsumers.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="48811" data-linked-resource-container-version="16"></span><br clear="none"> +If a Consumer becomes active after messages are pending from the store for it, or it's slower than the producer, then messages are paged in to the dispatch queue from a pending cursor: <span class="confluence-embedded-file-wrapper image-center-wrapper"><img class="confluence-embedded-image image-center" src="message-cursors.data/DispatchSlowConsumers.png" data-image-src="/confluence/download/attachments/48811/DispatchSlowConsumers.png?version=1&modificationDate=1193437656000&api=v2" data-unresolved-comment-count="0" data-linked-resource-id="59670895" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="DispatchSlowConsumers.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="48811" data-linked-resource-container-version="16"></span></p> <h3 id="MessageCursors-TypesofCursor">Types of Cursor</h3> @@ -102,15 +93,15 @@ If a Consumer becomes active after messa <h4 id="MessageCursors-VMCursor">VM Cursor</h4> -<p>The VM Cursor is how ActiveMQ 4.x works: references to a message are held in memory, and passed to the dispatch queue when needed. This can be very fast, but also has the downside of not being able to handle very slow consumers or consumers that have been inactive for a long time: <img class="confluence-embedded-image image-center" src="message-cursors.data/VMCursor.png" data-image-src="/confluence/download/attachments/48811/VMCursor.png?version=1&modificationDate=1193439154000&api=v2"></p> +<p>The VM Cursor is how ActiveMQ 4.x works: references to a message are held in memory, and passed to the dispatch queue when needed. This can be very fast, but also has the downside of not being able to handle very slow consumers or consumers that have been inactive for a long time: <span class="confluence-embedded-file-wrapper image-center-wrapper"><img class="confluence-embedded-image image-center" src="message-cursors.data/VMCursor.png" data-image-src="/confluence/download/attachments/48811/VMCursor.png?version=1&modificationDate=1193439154000&api=v2" data-unresolved-comment-count="0" data-linked-resource-id="59670900" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="VMCursor.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="48811" data-linked-resource-container-version="16"></span></p> <h4 id="MessageCursors-FilebasedCursor">File based Cursor</h4> -<p>The File based Cursor is dervied from the VM Cursor.  When memory in the broker reaches its limit, it can page messages to temporary files on disk. This type of cursor can be used when the message store might be relatively slow, but consumers are generally fast. By buffering to disk, it allows the message broker to handle message bursts from producers without resorting to paging in from slow storage: <img class="confluence-embedded-image image-center" src="message-cursors.data/FileCursor.png" data-image-src="/confluence/download/attachments/48811/FileCursor.png?version=1&modificationDate=1193438877000&api=v2"></p> +<p>The File based Cursor is dervied from the VM Cursor.  When memory in the broker reaches its limit, it can page messages to temporary files on disk. This type of cursor can be used when the message store might be relatively slow, but consumers are generally fast. By buffering to disk, it allows the message broker to handle message bursts from producers without resorting to paging in from slow storage: <span class="confluence-embedded-file-wrapper image-center-wrapper"><img class="confluence-embedded-image image-center" src="message-cursors.data/FileCursor.png" data-image-src="/confluence/download/attachments/48811/FileCursor.png?version=1&modificationDate=1193438877000&api=v2" data-unresolved-comment-count="0" data-linked-resource-id="59670898" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="FileCursor.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data- linked-resource-container-id="48811" data-linked-resource-container-version="16"></span></p> <h4 id="MessageCursors-PagingforNon-PersistentMessages">Paging for Non-Persistent Messages</h4> -<p>The store based cursor also handles cursors for non-persistent messages, which are not stored in the message store. Non-persistent messages are passed directly to the cursor, so the store based cursor embeds a file based cursor just for these types of messages: <img class="confluence-embedded-image image-center" src="message-cursors.data/NonPersistentMsgs.png" data-image-src="/confluence/download/attachments/48811/NonPersistentMsgs.png?version=1&modificationDate=1193445319000&api=v2"></p> +<p>The store based cursor also handles cursors for non-persistent messages, which are not stored in the message store. Non-persistent messages are passed directly to the cursor, so the store based cursor embeds a file based cursor just for these types of messages: <span class="confluence-embedded-file-wrapper image-center-wrapper"><img class="confluence-embedded-image image-center" src="message-cursors.data/NonPersistentMsgs.png" data-image-src="/confluence/download/attachments/48811/NonPersistentMsgs.png?version=1&modificationDate=1193445319000&api=v2" data-unresolved-comment-count="0" data-linked-resource-id="59670902" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="NonPersistentMsgs.png" data-base-url="https://cwiki.apache.org/confluence" data-linked-resource-content-type="image/png" data-linked-resource-container-id="48811" data-linked-resource-container-version="16"></span></p> <h3 id="MessageCursors-ConfiguringCursors">Configuring Cursors</h3> @@ -120,7 +111,7 @@ If a Consumer becomes active after messa <p>For Topics there is a dispatch queue and pending cursor for every subscriber.  It's possible to configure different policies for durable subscribers and transient subscribers - e.g:</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ <destinationPolicy> <policyMap> <policyEntries> @@ -150,7 +141,7 @@ Valid Durable Subscriber cursor types ar <p>For Queues there is a single dispatch Queue and pending Queue for every destination, so configuration is slightly different:</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ <destinationPolicy> <policyMap> <policyEntries> Modified: websites/production/activemq/content/message-groups.html ============================================================================== --- websites/production/activemq/content/message-groups.html (original) +++ websites/production/activemq/content/message-groups.html Sat Jun 27 21:23:55 2015 @@ -32,15 +32,6 @@ </style> <![endif]--> - <link href='http://activemq.apache.org/styles/highlighter/styles/shCore.css' rel='stylesheet' type='text/css' /> - <link href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css' rel='stylesheet' type='text/css' /> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js' type='text/javascript'></script> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js' type='text/javascript'></script> - - <script type="text/javascript"> - SyntaxHighlighter.defaults['toolbar'] = false; - SyntaxHighlighter.all(); - </script> <title> Apache ActiveMQ ™ -- Message Groups @@ -83,7 +74,7 @@ <td valign="top" width="100%"> <div class="wiki-content maincontent"><h2 id="MessageGroups-MessageGroups">Message Groups</h2> -<p>Message Groups rock! <img class="emoticon emoticon-smile" src="https://cwiki.apache.org/confluence/s/en_GB-1988229788/4109/76e0dbb30bc8580e459c201f3535d84f9283a9ac.1/_/images/icons/emoticons/smile.png" data-emoticon-name="smile" alt="(smile)"> They are an enhancement to the <a shape="rect" href="exclusive-consumer.html">Exclusive Consumer</a> feature to provide</p> +<p>Message Groups rock! <img class="emoticon emoticon-smile" src="https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/smile.png" data-emoticon-name="smile" alt="(smile)"> They are an enhancement to the <a shape="rect" href="exclusive-consumer.html">Exclusive Consumer</a> feature to provide</p> <ul><li>guarranteed ordering of the processing of related messages across a single queue</li><li>load balancing of the processing of messages across multiple consumers</li><li>high availability / auto-failover to other consumers if a JVM goes down</li></ul> @@ -113,7 +104,7 @@ <p>Note: like message selector matching, grouping based on JMSXGroupID occurs before dispatch on messages in memory. With the default maxPageSize setting, large backlogs of messages destined for one group they can block receipt of messages to other groups if they don't all fit in memory. You can change the default maxPageSize setting for destinations as follows:</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ <destinationPolicy> <policyMap> <policyEntries> @@ -128,7 +119,7 @@ <p>You just need to change your JMS producers to fill in the <strong>JMSXGroupID</strong> message header with some String value of your choice. e.g.</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ Mesasge message = session.createTextMessage("<foo>hey</foo>"); message.setStringProperty("JMSXGroupID", "IBM_NASDAQ_20/4/05"); ... @@ -142,7 +133,7 @@ producer.send(message); <p>You generally don't need to close a message group; just keep using it. However if you really do want to close a group you can add a negative sequence number.</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ Mesasge message = session.createTextMessage("<foo>hey</foo>"); message.setStringProperty("JMSXGroupID", "IBM_NASDAQ_20/4/05"); message.setIntProperty("JMSXGroupSeq", -1); @@ -177,7 +168,7 @@ producer.send(message); <p>So you can do code like...</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ String groupId = message.getStringProperty("JMSXGroupId"); if (message.getBooleanProperty("JMSXGroupFirstForConsumer")) { // flush cache for groupId @@ -193,7 +184,7 @@ if (message.getBooleanProperty("JMS <p>Here's the example of the destination policy that delays dispatch for 200ms</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ <destinationPolicy> <policyMap> <policyEntries> @@ -205,7 +196,7 @@ if (message.getBooleanProperty("JMS </div></div> <p>The following code snippet shows how to wait for two consumers (or two seconds) before dispatch starts</p> <div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[ +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[ <destinationPolicy> <policyMap> <policyEntries> @@ -218,15 +209,8 @@ if (message.getBooleanProperty("JMS <p>As <a shape="rect" class="external-link" href="http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/usecases/MessageGroupDelayedTest.java?view=markup">the appropriate test case</a> shows, adding a small time pause before dispatching or setting a minimum consumer number, ensures equal message group distribution.</p> - <div class="aui-message warning shadowed information-macro"> - <p class="title">Availability</p> - <span class="aui-icon icon-warning">Icon</span> - <div class="message-content"> - -<p>Available since version 5.3</p> - </div> - </div> - +<div class="confluence-information-macro confluence-information-macro-note"><p class="title">Availability</p><span class="aui-icon aui-icon-small aui-iconfont-warning confluence-information-macro-icon"></span><div class="confluence-information-macro-body"> +<p>Available since version 5.3</p></div></div> <h3 id="MessageGroups-See">See</h3> Modified: websites/production/activemq/content/message-redelivery-and-dlq-handling.html ============================================================================== --- websites/production/activemq/content/message-redelivery-and-dlq-handling.html (original) +++ websites/production/activemq/content/message-redelivery-and-dlq-handling.html Sat Jun 27 21:23:55 2015 @@ -32,16 +32,6 @@ </style> <![endif]--> - <link href='http://activemq.apache.org/styles/highlighter/styles/shCore.css' rel='stylesheet' type='text/css' /> - <link href='http://activemq.apache.org/styles/highlighter/styles/shThemeEclipse.css' rel='stylesheet' type='text/css' /> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shCore.js' type='text/javascript'></script> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shBrushJava.js' type='text/javascript'></script> - <script src='http://activemq.apache.org/styles/highlighter/scripts/shBrushXml.js' type='text/javascript'></script> - - <script type="text/javascript"> - SyntaxHighlighter.defaults['toolbar'] = false; - SyntaxHighlighter.all(); - </script> <title> Apache ActiveMQ ™ -- Message Redelivery and DLQ Handling @@ -83,14 +73,14 @@ <tr> <td valign="top" width="100%"> <div class="wiki-content maincontent"><h3 id="MessageRedeliveryandDLQHandling-Overview">Overview</h3><p>Messages are redelivered to a client when <strong>any</strong> of the following occurs:</p><ol><li>A transacted session is used and rollback() is called.</li><li>A transacted session is closed before commit is called.</li><li>A session is using CLIENT_ACKNOWLEDGE and Session.recover() is called.</li><li>A client connection times out (perhaps the code being executed takes longer than the configured time-out period)</li></ol><p>The broker transmits the default delivery policy that he prefers to a client connection in his BrokerInfo command packet. But the client can override the policy settings by using the ActiveMQConnection.getRedeliveryPolicy() method:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[RedeliveryPolicy policy = connection.getRedeliveryPolicy(); +<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[RedeliveryPolicy policy = connection.getRedeliveryPolicy(); policy.setInitialRedeliveryDelay(500); policy.setBackOffMultiplier(2); policy.setUseExponentialBackOff(true); policy.setMaximumRedeliveries(2); ]]></script> </div></div><p>Once a message's redelivery attempts exceeds the maximumRedeliveries configured for the <a shape="rect" href="redelivery-policy.html">Redelivery Policy</a>, a "Poison ack" is sent back to the broker letting him know that the message was considered a poison pill. The Broker then takes the message and sends it to a Dead Letter Queue so that it can be analyzed later on.</p><p>The default Dead Letter Queue in ActiveMQ is called ActiveMQ.DLQ; all undeliverable messages will get sent to this queue and this can be difficult to manage. So, you can set an "individualDeadLetterStrategy" in the destination policy map of the <code>activemq.xml</code> configuration file, which allows you to specify a specific dead letter queue prefix for a given queue or topic. You can apply this strategy using wild card if you like so that all queues get their own dead-letter queue, as is shown in the example below.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[<broker...> +<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[<broker...> <destinationPolicy> <policyMap> <policyEntries> @@ -112,7 +102,7 @@ policy.setMaximumRedeliveries(2); </broker> ]]></script> </div></div><p>See the <a shape="rect" href="redelivery-policy.html">Redelivery Policy</a> section for some more detail on the policy options.</p><h3 id="MessageRedeliveryandDLQHandling-AutomaticallyDiscardExpiredMessages">Automatically Discard Expired Messages</h3><p>Some folks simply need expired messages to be discarded instead of sent to the DLQ (i.e., skip the DLQ entirely). This simplifies the management of the DLQ so that you're not sifting through loads of expired messages to find messages with real problems. To tell ActiveMQ to just discard expired messages, configure the <code>processExpired</code> property to false on a dead letter strategy:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[<broker...> +<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[<broker...> <destinationPolicy> <policyMap> <policyEntries> @@ -134,7 +124,7 @@ policy.setMaximumRedeliveries(2); </broker> ]]></script> </div></div><h3 id="MessageRedeliveryandDLQHandling-Placenon-persistentmessagesontothedead-letterqueue">Place non-persistent messages onto the dead-letter queue</h3><p>By default, ActiveMQ will not place undeliverable <em>non-persistent</em> messages on the dead-letter queue. The rationale for this behavior is that if the application doesn't care enough to make the message persistent, then there is little or no value in recording that the message was undeliverable. If you do want to place non-persistent messages on the dead-letter queue, then you should set <code>processNonPersistent="true"</code> on the dead-letter strategy.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[<broker...> +<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[<broker...> <destinationPolicy> <policyMap> <policyEntries> @@ -155,7 +145,7 @@ policy.setMaximumRedeliveries(2); </broker> ]]></script> </div></div><h3 id="MessageRedeliveryandDLQHandling-SettingexpirationonmessagesintheDLQ">Setting expiration on messages in the DLQ</h3><p>By default, ActiveMQ will never expire messages sent to the DLQ but from v5.12, the deadLetterStrategy supports an expiration attribute where the value is in milliseconds. Note, be selective in how this is applied. In particular do not apply expiration to your DLQ destinations by setting expiration on a default or inclusive wildcard policy entry. If a DLQ entry expires and forwards to the same or another DLQ with expiry, you will introduce a loop that can be problematic if the strategy audit is disabled or it's sliding window is exceeded.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[<broker...> +<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[<broker...> <destinationPolicy> <policyMap> <policyEntries> @@ -171,7 +161,7 @@ policy.setMaximumRedeliveries(2); </broker> ]]></script> </div></div><h3 id="MessageRedeliveryandDLQHandling-TheDiscardingDLQPlugin">The Discarding DLQ Plugin</h3><p>A very simple yet very useful plugin to the broker. This plugin allows the configuration of queues and topics, all or matched based on <a shape="rect" class="external-link" href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Pattern.html" rel="nofollow">Java SE regular expressions</a>, to drop messages that have been sent to the DLQ. This is extremely useful when using <a shape="rect" href="slow-consumer-handling.html#SlowConsumerHandling-ConstantPendingMessageLimitStrategy">constant pending message limit strategy</a> or the other eviction rules, but you don't want to incur the overhead of yet another consumer to clear the DLQ.</p><p>Below is an example of a basic configuration to drop everything:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[<beans> +<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[<beans> <broker ...> <plugins> <discardingDLQBrokerPlugin dropAll="true" dropTemporaryTopics="true" dropTemporaryQueues="true" /> @@ -180,7 +170,7 @@ policy.setMaximumRedeliveries(2); </beans> ]]></script> </div></div><p>Below is a slightly more complex example:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[<beans> +<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[<beans> <broker ...> <plugins> <discardingDLQBrokerPlugin dropOnly="MY.EXAMPLE.TOPIC.29 MY.EXAMPLE.QUEUE.87" reportInterval="1000" /> @@ -189,7 +179,7 @@ policy.setMaximumRedeliveries(2); </beans> ]]></script> </div></div><ul><li>Notice that destination names are space delimited.</li><li>The reportInterval property is used to denote how frequently do we output how many messages we have dropped - use 0 to disable.</li></ul><p>Below is an even more complex example:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[<beans> +<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[<beans> <broker ...> <plugins> <discardingDLQBrokerPlugin dropOnly="MY.EXAMPLE.TOPIC.[0-9]{3} MY.EXAMPLE.QUEUE.[0-9]{3}" reportInterval="3000" /> @@ -198,7 +188,7 @@ policy.setMaximumRedeliveries(2); </beans> ]]></script> </div></div><ul><li>Notice that the destination names use regular expressions. These match the number 000..999 at the end of each destination name.</li></ul><p>For more information, see the source code for the <a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/plugin/DiscardingDLQBrokerPlugin.java">DiscardingDLQBrokerPlugin</a> and the <a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/activemq/trunk/activemq-broker/src/main/java/org/apache/activemq/plugin/DiscardingDLQBroker.java">DiscardingDLQBroker</a></p><h3 id="MessageRedeliveryandDLQHandling-BrokerRedelivery(v5.7)">Broker Redelivery (v5.7)</h3><p>Typically a consumer handles redelivery so that it can maintain message order while a message appears as inflight on the broker.<br clear="none"> This means that redelivery is limited to a single consumer unless that consumer terminates. In this way the broker is unawar e of redelivery.<br clear="none"> With broker redelivery, it is possible to have the broker redeliver a message after a delay using a resend. This is implemented by a broker plugin that handles dead letter processing by redelivery via the scheduler. This is useful when total message order is not important and where through put and load distribution among consumers is. With broker redelivery, messages that fail delivery to a given consumer can get immediately re-dispatched.<br clear="none"> The feature is enabled via xml configuration of the form:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> -<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[<broker xmlns="http://activemq.apache.org/schema/core" schedulerSupport="true" > +<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[<broker xmlns="http://activemq.apache.org/schema/core" schedulerSupport="true" > .... <plugins> <redeliveryPlugin fallbackToDeadLetter="true" sendToDlqIfMaxRetriesExceeded="true">