blob: 2421a4e08325d640a62b735d8577d7439506216e [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<html>
<head>
<link href="http://activemq.apache.org/styles/site.css" rel="stylesheet" type="text/css"/>
<link href="http://activemq.apache.org/styles/type-settings.css" rel="stylesheet" type="text/css"/>
<script src="http://activemq.apache.org/styles/prototype.js" type="text/javascript"></script>
<script src="http://activemq.apache.org/styles/rico.js" type="text/javascript"></script>
<script src="http://activemq.apache.org/styles/site.js" type="text/javascript"></script>
<style type="text/css">
.maincontent { overflow:hidden; }
</style>
<!--[if IE]>
<style type="text/css">
.maincontent { width:100%; }
</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 &#8482; -- Advisory Message
</title>
</head>
<body>
<div class="white_box">
<div class="header">
<div class="header_l">
<div class="header_r">
</div>
</div>
</div>
<div class="content">
<div class="content_l">
<div class="content_r">
<div>
<!-- Banner -->
<div id="asf_logo">
<div id="activemq_logo">
<a shape="rect" style="float:left; width:280px;display:block;text-indent:-5000px;text-decoration:none;line-height:60px; margin-top:10px; margin-left:100px;" href="http://activemq.apache.org" title="The most popular and powerful open source Message Broker">ActiveMQ</a>
<a shape="rect" style="float:right; width:210px;display:block;text-indent:-5000px;text-decoration:none;line-height:60px; margin-top:15px; margin-right:10px;" href="http://www.apache.org" title="The Apache Software Foundation">ASF</a>
</div>
</div>
<div class="top_red_bar">
<div id="site-breadcrumbs">
<a href="features.html">Features</a>&nbsp;&gt;&nbsp;<a href="message-features.html">Message Features</a>&nbsp;&gt;&nbsp;<a href="advisory-message.html">Advisory Message</a>
</div>
<div id="site-quicklinks">
<p><a shape="rect" href="download.html">Download</a> | <a shape="rect" class="external-link" href="http://activemq.apache.org/maven/apidocs/index.html">JavaDocs</a> <a shape="rect" href="javadocs.html">More...</a> | <a shape="rect" href="source.html">Source</a> | <a shape="rect" href="discussion-forums.html">Forums</a> | <a shape="rect" href="support.html">Support</a></p>
</div>
</div>
<table border="0">
<tbody>
<tr>
<td valign="top" width="100%">
<div class="wiki-content maincontent"><p>ActiveMQ supports advisory messages which allows you to watch the system using regular JMS messages. Currently we have advisory messages that support:</p><ul><li>consumers, producers and connections starting and stopping</li><li>temporary destinations being created and destroyed</li><li>messages expiring on topics and queues</li><li>brokers sending messages to destinations with no consumers.</li><li>connections starting and stopping</li></ul><p>Advisory messages can be thought as some kind of administrative channel where you receive information regarding what is happening on your JMS provider along with what's happening with producers, consumers and destinations. When you look at a broker via <a shape="rect" href="jmx.html">JMX</a> you will see the advisory topics prefixed with <strong><code>ActiveMQ.Advisory.</code></strong>.</p><p>Every Advisory has the message <strong>type</strong> 'Advisory' and some predefined message properties:</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Property</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Type</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Version</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>originBrokerId</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>StringProperty</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The id of the broker where the advisory originated.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>5.x</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>originBrokerName</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>StringProperty</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The name of the broker where the advisory originated.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>5.x</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>originBrokerURL</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>StringProperty</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The first URL of the broker where the advisory originated.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>5.2</p></td></tr></tbody></table></div><p>In addition, some messages carry a&#160;<strong><code>Command</code></strong> object, which carries additional information about the nature of the advisory, e.g., a subscription to each of the destination returns an <strong><code>ActiveMQMessage</code></strong>. Specific&#160;<strong><code>DataStructure</code></strong> objects, e.g.,. <strong><code>ConsumerInfo</code>, <code>ProducerInfo</code></strong>, <strong><code>ConnectionInfo</code></strong> can be retrieved using <strong><code>ActiveMQMessage.getDataStructure()</code></strong>.</p><p>For example:</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;">Destination advisoryDestination = AdvisorySupport.getProducerAdvisoryTopic(destination)
MessageConsumer consumer = session.createConsumer(advisoryDestination);
consumer.setMessageListener(this);
public void onMessage(Message msg){
if(msg instanceof ActiveMQMessage) {
try {
ActiveMQMessage aMsg = (ActiveMQMessage)msg;
ProducerInfo prod = (ProducerInfo) aMsg.getDataStructure();
}
catch(JMSException e) {
log.error("Failed to process message: " + msg);
}
}
}
</pre>
</div></div><h2 id="AdvisoryMessage-Thefollowingadvisorytopicsaresupported">The following advisory topics are supported</h2><h3 id="AdvisoryMessage-Clientbasedadvisories">Client based advisories</h3><div class="confluence-information-macro confluence-information-macro-tip"><p class="title">Tip</p><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>These are always generated.</p></div></div><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Advisory Topics</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Properties</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Data Structure</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.Connection</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Connection start &amp; stop messages.</p></td><td colspan="1" rowspan="1" class="confluenceTd">&#160;</td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ConnectionInfo</code>,&#160;<code>RemoveInfo</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.Producer.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Producer start &amp; stop messages on a Queue.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='producerCount'</code> - the number of producers</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ProducerInfo</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.Producer.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Producer start &amp; stop messages on a Topic.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='producerCount'</code>&#160;- the number of producers</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ProducerInfo</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.Consumer.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Consumer start &amp; stop messages on a Queue.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='consumerCount'</code> - the number of Consumers</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ConnectionInfo</code>,&#160;<code>RemoveInfo</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.Consumer.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Consumer start &amp; stop messages on a Topic.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='consumerCount'</code>&#160;- the number of Consumers</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ConnectionInfo</code>,&#160;<code>RemoveInfo</code></p></td></tr></tbody></table></div><p>Note that the consumer start/stop advisory messages also have a&#160;<strong><code>consumerCount</code></strong> header to indicate the number of active consumers on the destination when the advisory message was sent. This means you can use the following selector to be notified when there are no active consumers on a given destination:</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;">consumerCount = 0
</pre>
</div></div><h3 id="AdvisoryMessage-DestinationandMessagebasedadvisories">Destination and Message based advisories</h3><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Advisory Topics</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Properties</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Data Structure</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Default</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>PolicyEntry Property</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Queue create &amp; destroy.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>DestinationInfo</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>none</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Topic create &amp; destroy.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>DestinationInfo</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>none</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.TempQueue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Temporary Queue create &amp; destroy.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>DestinationInfo</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>none</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.TempTopic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Temporary Topic create &amp; destroy.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>DestinationInfo</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>none</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.Expired.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Expired messages on a Queue.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='orignalMessageId'</code> - the expired id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>none</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.Expired.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Expired messages on a Topic.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='orignalMessageId'</code> - the expired id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>none</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.NoConsumer.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>No consumer is available to process messages being sent on a Queue.</p></td><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><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>sendAdvisoryIfNoConsumers</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.NoConsumer.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>No consumer is available to process messages being sent on a Topic.</p></td><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><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>sendAdvisoryIfNoConsumers</code></p></td></tr></tbody></table></div><div class="confluence-information-macro confluence-information-macro-tip"><p class="title">Tip</p><span class="aui-icon aui-icon-small aui-iconfont-approve confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p><strong><code>NoConsumer</code></strong> topic advisories are sent only for non-persistent messages.</p></div></div><h3 id="AdvisoryMessage-Newadvisoriesinversion5.2">New advisories in version 5.2</h3><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Advisory Topics</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Properties</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Data Structure</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Default</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>PolicyEntry Property</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.SlowConsumer.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Slow Queue Consumer.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='consumerId'</code> - the consumer id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ConsumerInfo</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryForSlowConsumers</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.SlowConsumer.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Slow Topic Consumer.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='consumerId'</code>&#160;- the consumer id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ConsumerInfo</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryForSlowConsumers</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.FastProducer.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Fast Queue producer.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='producerId'</code> - the producer id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ProducerInfo</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisdoryForFastProducers</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory. FastProducer.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Fast Topic producer.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='consumerId'</code>' - the producer id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ProducerInfo</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisdoryForFastProducers</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.MessageDiscarded.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Message discarded.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='orignalMessageId'</code> - the discarded id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryForDiscardingMessages</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.MessageDiscarded.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Message discarded.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='orignalMessageId'</code>&#160;- the discarded id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryForDiscardingMessages</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.MessageDelivered.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Message delivered to the broker.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='orignalMessageId'</code>&#160;- the delivered id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryForDelivery</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.MessageDelivered.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Message delivered to the broker.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='orignalMessageId'</code>&#160;- the delivered id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryForDelivery</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.MessageConsumed.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Message consumed by a client.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='orignalMessageId'</code>&#160;- the delivered id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryForConsumed</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.MessageConsumed.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Message consumed by a client.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='orignalMessageId'</code>&#160;- the delivered id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryForConsumed</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.FULL</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>A Usage resource is at its limit.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='usageName'</code> - the name of Usage resource</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>false</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryWhenFull</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.MasterBroker</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>A broker is now the master in a master/slave configuration.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>null</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>true</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>none</code></p></td></tr></tbody></table></div><h3 id="AdvisoryMessage-NewAdvisoriesin5.4">New Advisories in 5.4</h3><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Advisory Topics</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Properties</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Data Structure</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Default</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>PolicyEntry Property</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.MessageDLQd.Queue</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Message sent to DLQ.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='orignalMessageId'</code> - the delivered id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Always on</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryForConsumed</code></p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.MessageDLQd.Topic</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Message sent to DLQ.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>String='orignalMessageId'</code>&#160;- the delivered id</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Message</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Always on</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>advisoryForConsumed</code></p></td></tr></tbody></table></div><h3 id="AdvisoryMessage-Networkbridgeadvisories">Network bridge advisories</h3><p>Starting with ActiveMQ version 5.5 you can watch advisory topics for events related to the status of network bridges. You can get advisory messages when the network bridge is started or stopped.</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Advisory Topics</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Description</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Properties</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Data Structure</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Default</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p><code>ActiveMQ.Advisory.NetworkBridge</code></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Network bridge being stopped or started.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>Boolean="started"</code>&#160;-&#160;<strong><code>true</code></strong> if bridge is started,&#160;<strong><code>false</code></strong> if it is stopped.<br clear="none"><code>Boolean="createdByDuplex"</code>&#160;-&#160;<strong><code>true</code></strong> if the bridge is created by remote network connector.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><code>BrokerInfo</code> - provides data of the remote broker</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Always on</p></td></tr></tbody></table></div><h3 id="AdvisoryMessage-EnablingAdvisoriesDisabledbyDefault">Enabling Advisories Disabled by Default</h3><p>The advisories that are not turned on by default (see the last column) can be enabled on a&#160;<strong><code>PolicyEntry</code></strong> in the ActiveMQ Broker Configuration, e.g., to enable a message consumed advisory you can configure the following:</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;destinationPolicy&gt;
&lt;policyMap&gt;
&lt;policyEntries&gt;
&lt;policyEntry topic="&gt;" advisoryForConsumed="true"/&gt;
&lt;/policyEntries&gt;
&lt;/policyMap&gt;
&lt;/destinationPolicy&gt;
</pre>
</div></div><div class="confluence-information-macro confluence-information-macro-information"><p class="title">Hint</p><span class="aui-icon aui-icon-small aui-iconfont-info confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>The&#160;<strong><code>&gt;</code></strong> character matches all topics - you can use wild-card matches for setting a destination policy - see <a shape="rect" href="wildcards.html">Wildcards</a></p></div></div><h3 id="AdvisoryMessage-DisablingAdvisoryMessages">Disabling Advisory Messages</h3><p>The use of advisory messages incurs a small overhead in terms of memory and connection resources that is related to the number of destinations in your system. In some cases it can make sense to disable all advisories.</p><p>Advisories need to be disabled both on the Broker, via XML Configuration</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;broker advisorySupport="false"&gt;
</pre>
</div></div><p>or from java code:</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;">BrokerService broker = new BrokerService();
broker.setAdvisorySupport(false);
// ...
broker.start();
</pre>
</div></div><p><em>and</em> on your&#160;<strong><code>ActiveMQConnectionFactory</code></strong> (because a subscription to an advisory topic will auto create it) via the <strong><code>brokerUrl</code></strong>:</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;">tcp://localhost:61616?jms.watchTopicAdvisories=false
</pre>
</div></div><p>or via java code using the&#160;<strong><code>watchTopicAdvisories</code></strong> attribute on the <strong><code>ActiveMQConnectionFactory</code></strong>.</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;">ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
factory.setWatchTopicAdvisories(false);
</pre>
</div></div><div class="confluence-information-macro confluence-information-macro-warning"><p class="title">Warning</p><span class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div class="confluence-information-macro-body"><p>Advisory messages are required for <a shape="rect" href="networks-of-brokers.html">dynamic network broker topologies</a> as&#160;<code>NetworkConnectors</code> subscribe to advisory messages. In the absence of advisories, a network must be statically configured.</p></div></div><h3 id="AdvisoryMessage-UsingtheDestinations">Using the Destinations</h3><p>All of the above destinations are really prefixes which are appended with important information (like the actual topic or queue, the client ID, producer ID, consumer ID etc). This allows you to reuse the power of publish/subscribe, <a shape="rect" href="wildcards.html">Wildcards</a> and <a shape="rect" href="selectors.html">Selectors</a> to filter the advisory messages as you see fit.</p><p>For example if you want to subscribe to expired messages on a topic&#160;<strong><code>FOO.BAR</code></strong> you could subscribe to <strong><code>ActiveMQ.Advisory.Expired.Topic.FOO.BAR</code></strong>. To subscribe to all messages of a certain kind of advisory just append <strong><code>.&gt;</code></strong> to the topic, e.g., to subscribe to all the consumers starting and stopping to topics and queues subscribe to <strong><code>ActiveMQ.Advisory.Consumer..&gt;</code></strong>.</p><h3 id="AdvisoryMessage-HelperMethods">Helper Methods</h3><p>Methods to get the advisory destination objects are available in <a shape="rect" class="external-link" href="http://incubator.apache.org/activemq/maven/activemq-core/apidocs/org/apache/activemq/advisory/AdvisorySupport.html">AdvisorySupport</a> through the following methods.</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;">AdvisorySupport.getConsumerAdvisoryTopic()
AdvisorySupport.getProducerAdvisoryTopic()
AdvisorySupport.getExpiredTopicMessageAdvisoryTopic()
AdvisorySupport.getExpiredQueueMessageAdvisoryTopic()
AdvisorySupport.getNoTopicConsumersAdvisoryTopic()
AdvisorySupport.getNoQueueConsumersAdvisoryTopic()
AdvisorySupport.getDestinationAdvisoryTopic()
AdvisorySupport.getExpiredQueueMessageAdvisoryTopic()
AdvisorySupport.getExpiredTopicMessageAdvisoryTopic()
AdvisorySupport.getNoQueueConsumersAdvisoryTopic()
AdvisorySupport.getNoTopicConsumersAdvisoryTopic()
// Version 5.2 on:
AdvisorySupport.getSlowConsumerAdvisoryTopic()
AdvisorySupport.getFastProducerAdvisoryTopic()
AdvisorySupport.getMessageDiscardedAdvisoryTopic()
AdvisorySupport.getMessageDeliveredAdvisoryTopic()
AdvisorySupport.getMessageConsumedAdvisoryTopic()
AdvisorySupport.getMasterBrokerAdvisoryTopic()
AdvisorySupport.getFullAdvisoryTopic()
</pre>
</div></div><p>Some helper classes to deal with advisory messages are available in the <a shape="rect" class="external-link" href="http://activemq.apache.org/maven/activemq-core/apidocs/org/apache/activemq/advisory/package-summary.html">advisories</a> package.</p></div>
</td>
<td valign="top">
<div class="navigation">
<div class="navigation_top">
<div class="navigation_bottom">
<h3 id="Navigation-Overviewhttps://cwiki.apache.org/confluence/pages/viewpage.action?pageId=35985"><a shape="rect" href="overview.html">Overview</a></h3><ul class="alternate"><li><a shape="rect" href="index.html">Index</a></li><li><a shape="rect" href="news.html">News</a></li><li><a shape="rect" href="new-features.html">New Features</a></li><li><a shape="rect" href="getting-started.html">Getting Started</a></li><li><a shape="rect" href="faq.html">FAQ</a></li><li><a shape="rect" href="articles.html">Articles</a></li><li><a shape="rect" href="books.html">Books</a></li><li><a shape="rect" href="download.html">Download</a></li><li><a shape="rect" class="external-link" href="http://www.apache.org/licenses/">License</a></li></ul><h3 id="Navigation-Search">Search</h3><div>
<form enctype="application/x-www-form-urlencoded" method="get" action="http://www.google.com/search" style="font-size: 10px;">
<input type="hidden" name="ie" value="UTF-8">
<input type="hidden" name="oe" value="UTF-8">
<input maxlength="255" type="text" name="q" size="15" value="value"><br clear="none">
<input type="submit" name="btnG" value="Search">
<input type="hidden" name="domains" value="activemq.apache.org">
<input type="hidden" name="sitesearch" value="activemq.apache.org">
</form>
</div>
<h3 id="Navigation-SubProjects">Sub Projects</h3><ul class="alternate"><li><a shape="rect" class="external-link" href="http://activemq.apache.org/artemis/">Artemis</a></li><li><a shape="rect" class="external-link" href="http://activemq.apache.org/apollo" title="ActiveMQ Apollo">Apollo</a></li><li><a shape="rect" class="external-link" href="http://activemq.apache.org/cms/">CMS</a></li><li><a shape="rect" class="external-link" href="http://activemq.apache.org/nms/" title="NMS is the .Net Messaging API">NMS</a></li></ul><h3 id="Navigation-Communityhttps://cwiki.apache.org/confluence/pages/viewpage.action?pageId=36130"><a shape="rect" href="community.html">Community</a></h3><ul class="alternate"><li><a shape="rect" href="support.html">Support</a></li><li><a shape="rect" href="contributing.html">Contributing</a></li><li><a shape="rect" href="discussion-forums.html">Discussion Forums</a></li><li><a shape="rect" href="mailing-lists.html">Mailing Lists</a></li><li><a shape="rect" href="irc.html">IRC</a></li><li><a shape="rect" class="external-link" href="http://javabot.evanchooly.com/logs/%23apache-activemq/today" rel="nofollow">IRC Log</a></li><li><a shape="rect" href="security-advisories.html">Security Advisories</a></li><li><a shape="rect" href="site.html">Site</a></li><li><a shape="rect" class="external-link" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li><li><a shape="rect" href="projects-using-activemq.html">Projects Using ActiveMQ</a></li><li><a shape="rect" href="users.html">Users</a></li><li><a shape="rect" href="team.html">Team</a></li><li><a shape="rect" href="thanks.html">Thanks</a></li></ul><h3 id="Navigation-Featureshttps://cwiki.apache.org/confluence/pages/viewpage.action?pageId=35883"><a shape="rect" href="features.html">Features</a></h3><ul class="alternate"><li><a shape="rect" href="advisory-message.html">Advisory Message</a></li><li><a shape="rect" href="clustering.html">Clustering</a></li><li><a shape="rect" href="cross-language-clients.html">Cross Language Clients</a></li><li><a shape="rect" href="enterprise-integration-patterns.html">Enterprise Integration Patterns</a></li><li><a shape="rect" href="jmx.html">JMX</a></li><li><a shape="rect" href="jms-to-jms-bridge.html">JMS to JMS Bridge</a></li><li><a shape="rect" href="masterslave.html">MasterSlave</a></li><li><a shape="rect" href="message-groups.html">Message Groups</a></li><li><a shape="rect" href="networks-of-brokers.html">Networks of Brokers</a></li><li><a shape="rect" href="performance.html">Performance</a></li><li><a shape="rect" href="persistence.html">Persistence</a></li><li><a shape="rect" href="security.html">Security</a></li><li><a shape="rect" href="virtual-destinations.html">Virtual Destinations</a></li><li><a shape="rect" href="visualisation.html">Visualisation</a></li><li><a shape="rect" href="features.html">More ...</a></li></ul><h3 id="Navigation-Connectivityhttps://cwiki.apache.org/confluence/pages/viewpage.action?pageId=36167"><a shape="rect" href="connectivity.html">Connectivity</a></h3><ul class="alternate"><li><a shape="rect" href="ajax.html">Ajax</a></li><li><a shape="rect" href="amqp.html">AMQP</a></li><li><a shape="rect" href="axis-and-cxf-support.html">Axis and CXF Support</a></li><li><a shape="rect" href="c-integration.html">C Integration</a></li><li><a shape="rect" href="activemq-c-clients.html">C++</a></li><li><a shape="rect" class="external-link" href="http://activemq.apache.org/nms/">C# and .Net Integration</a></li><li><a shape="rect" class="external-link" href="http://activemq.apache.org/cms/">CMS</a></li><li><a shape="rect" href="j2ee.html">J2EE</a></li><li><a shape="rect" href="jboss-integration.html">JBoss Integration</a></li><li><a shape="rect" class="external-link" href="http://docs.codehaus.org/display/JETTY/Integrating+with+ActiveMQ" rel="nofollow">Jetty</a></li><li><a shape="rect" href="jndi-support.html">JNDI Support</a></li><li><a shape="rect" class="external-link" href="http://activemq.apache.org/nms/" title="NMS is the .Net Messaging API">NMS</a></li><li><a shape="rect" href="rest.html">REST</a></li><li><a shape="rect" href="rss-and-atom.html">RSS and Atom</a></li><li><a shape="rect" href="spring-support.html">Spring Support</a></li><li><a shape="rect" href="stomp.html">Stomp</a></li><li><a shape="rect" href="tomcat.html">Tomcat</a></li><li><a shape="rect" href="unix-service.html">Unix Service</a></li><li><a shape="rect" href="weblogic-integration.html">WebLogic Integration</a></li><li><a shape="rect" href="xmpp.html">XMPP</a></li><li><a shape="rect" href="connectivity.html">More ...</a></li></ul><h3 id="Navigation-UsingActiveMQ5https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=71176"><a shape="rect" href="using-activemq-5.html">Using ActiveMQ 5</a></h3><ul class="alternate"><li><a shape="rect" href="version-5-getting-started.html">Getting Started</a></li><li><a shape="rect" href="version-5-initial-configuration.html">Initial Configuration</a></li><li><a shape="rect" href="version-5-run-broker.html">Running a Broker</a></li><li><a shape="rect" href="how-do-i-embed-a-broker-inside-a-connection.html">Embedded Brokers</a></li><li><a shape="rect" href="activemq-command-line-tools-reference.html">Command Line Tools</a></li><li><a shape="rect" href="configuring-version-5-transports.html">Configuring Transports</a></li><li><a shape="rect" href="version-5-examples.html">Examples</a></li><li><a shape="rect" href="version-5-web-samples.html">Web Samples</a></li><li><a shape="rect" href="how-can-i-monitor-activemq.html">Monitoring the Broker</a></li><li><a shape="rect" href="version-5-xml-configuration.html">Xml Configuration</a></li><li><a shape="rect" href="xml-reference.html">Xml Reference</a></li><li><a shape="rect" href="using-activemq-5.html">More ...</a></li></ul><h3 id="Navigation-Toolshttps://cwiki.apache.org/confluence/pages/viewpage.action?pageId=35912"><a shape="rect" href="tools.html">Tools</a></h3><ul class="alternate"><li><a shape="rect" href="web-console.html">Web Console</a></li><li><a shape="rect" href="activemq-performance-module-users-manual.html">Maven2 Performance Plugin</a></li></ul><h3 id="Navigation-Supporthttps://cwiki.apache.org/confluence/pages/viewpage.action?pageId=35919"><a shape="rect" href="support.html">Support</a></h3><ul class="alternate"><li><a shape="rect" class="external-link" href="http://issues.apache.org/jira/browse/AMQ">Issues</a></li><li><a shape="rect" class="external-link" href="http://issues.apache.org/activemq/browse/AMQ?report=com.atlassian.jira.plugin.system.project:roadmap-panel">Roadmap</a></li><li><a shape="rect" class="external-link" href="http://issues.apache.org/activemq/browse/AMQ?report=com.atlassian.jira.plugin.system.project:changelog-panel">Change log</a></li></ul><h3 id="Navigation-Developershttps://cwiki.apache.org/confluence/pages/viewpage.action?pageId=35903"><a shape="rect" href="developers.html">Developers</a></h3><ul class="alternate"><li><a shape="rect" href="source.html">Source</a></li><li><a shape="rect" href="building.html">Building</a></li><li><a shape="rect" href="developer-guide.html">Developer Guide</a></li><li><a shape="rect" href="becoming-a-committer.html">Becoming a committer</a></li><li><a shape="rect" href="code-overview.html">Code Overview</a></li><li><a shape="rect" href="wire-protocol.html">Wire Protocol</a></li><li><a shape="rect" href="release-guide.html">Release Guide</a></li></ul><h3 id="Navigation-Tests">Tests</h3><ul class="alternate"><li><a shape="rect" href="activemq-performance-module-users-manual.html">Maven2 Performance Plugin</a></li><li><a shape="rect" href="benchmark-tests.html">Benchmark Tests</a></li><li><a shape="rect" href="jmeter-system-tests.html">JMeter System Tests</a></li><li><a shape="rect" href="jmeter-performance-tests.html">JMeter Performance Tests</a></li><li><a shape="rect" href="integration-tests.html">Integration Tests</a></li></ul><h3 id="Navigation-ProjectReports">Project Reports</h3><ul class="alternate"><li><a shape="rect" href="junit-reports.html">JUnit Reports</a></li><li><a shape="rect" href="source-xref.html">Source XRef</a></li><li><a shape="rect" href="test-source-xref.html">Test Source XRef</a></li><li><a shape="rect" href="xml-reference.html">Xml Reference</a></li></ul>
</div>
</div>
</div>
</td>
</tr>
</tbody>
</table>
<div class="bottom_red_bar"></div>
</div>
</div>
</div>
</div>
<div class="black_box">
<div class="footer">
<div class="footer_l">
<div class="footer_r">
<div>
<a href="http://activemq.apache.org/privacy-policy.html">Privacy Policy</a> -
(<a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=35940">edit this page</a>)
</div>
</div>
</div>
</div>
</div>
</div>
<div class="design_attribution">
&copy; 2004-2011 The Apache Software Foundation.
<br/>
Apache ActiveMQ, ActiveMQ, Apache, the Apache feather logo, and the Apache ActiveMQ project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
<br/>
<a href="http://hiramchirino.com">Graphic Design By Hiram</a>
</div>
<!-- delay the loading of large javascript files to the end so that they don't interfere with the loading of page content -->
<span style="display: none">
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-1347593-1");
pageTracker._initData();
pageTracker._trackPageview();
</script>
</span>
</body>
</html>