activemq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From build...@apache.org
Subject svn commit: r1017262 [3/3] - in /websites/production/activemq/content: ./ cache/
Date Fri, 25 Aug 2017 08:24:12 GMT
Modified: websites/production/activemq/content/virtual-destinations.html
==============================================================================
--- websites/production/activemq/content/virtual-destinations.html (original)
+++ websites/production/activemq/content/virtual-destinations.html Fri Aug 25 08:24:11 2017
@@ -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/shBrushXml.js'
type='text/javascript'></script> 
-         
-      <script type="text/javascript"> 
-        SyntaxHighlighter.defaults['toolbar'] = false; 
-        SyntaxHighlighter.all(); 
-      </script> 
     
     <title>
     Apache ActiveMQ &#8482; -- Virtual Destinations
@@ -80,16 +71,13 @@
   <tbody>
         <tr>
         <td valign="top" width="100%">
-<div class="wiki-content maincontent"><p><em>Virtual Destinations</em>
allow us to create logical destinations that clients can use to produce and consume from but
which map onto one or more <em>physical destinations</em>. It allows us to provide
more flexible loosely coupled messaging configurations.</p><h2 id="VirtualDestinations-VirtualTopics">Virtual
Topics</h2><p>The idea behind <em>publish subscribe</em> is a great
one. Allow producers to be decoupled from consumers so that they do not even know how many
consumers are interested in the messages they publish. The JMS specification defines support
for durable topics however they have limitations as we will describe...</p><h3 id="VirtualDestinations-ThelimitationsofJMSdurabletopics">The
limitations of JMS durable topics</h3><p>A JMS durable subscriber MessageConsumer
is created with a unique JMS clientID and durable subscriber name. To be JMS compliant only
one JMS connection can be active at any point in time for one JMS clientI
 D, and only one consumer can be active for a clientID and subscriber name. i.e., only <strong>one</strong>
thread can be actively consuming from a given logical topic subscriber. This means we cannot
implement</p><ul><li>load balancing of messages.</li><li>fast
failover of the subscriber if that one process running that one consumer thread dies.</li></ul><p>Now
<em>queue</em> semantics in JMS offer the ability to load balance work across
a number of consumers in a reliable way - allowing many threads, processes and machines to
be used to process messages. Then we have sophisticated sticky load balancing techniques like
<a shape="rect" href="message-groups.html">Message Groups</a> to load balance
and parallelise work while maintaining ordering.</p><p>Another added benefit of
having physical queues for each logical topic subscriber is we can them monitor the queue
depths via <a shape="rect" href="jmx.html">JMX</a> to monitor system performance
together with being able to browse these 
 physical queues.</p><h3 id="VirtualDestinations-VirtualTopicstotherescue">Virtual
Topics to the rescue</h3><p>The idea behind virtual topics is that producers send
to a topic in the usual JMS way. Consumers can continue to use the Topic semantics in the
JMS specification. However if the topic is virtual, consumer can consume from a physical queue
for a logical topic subscription, allowing many consumers to be running on many machines &amp;
threads to load balance the load.</p><p>E.g., let's say we have a topic called
<strong>VirtualTopic.Orders</strong>. (Where the prefix VirtualTopic. indicates
its a virtual topic). And we logically want to send orders to systems A and B. Now with regular
durable topics we'd create a JMS consumer for clientID_A and "A" along with clientID_B and
"B".</p><p>With virtual topics we can just go right ahead and consume to queue
<strong>Consumer.A.VirtualTopic.Orders</strong> to be a consumer for system A
or consume to <strong>Consumer.B.VirtualTopic.Orde
 rs</strong> to be a consumer for system B.</p><p>We can now have a pool
of consumers for each system which then compete for messages for systems A or B such that
all the messages for system A are processed exactly once and similarly for system B.</p><h3
id="VirtualDestinations-Customizingtheout-of-the-boxdefaults">Customizing the out-of-the-box
defaults</h3><p>The out-of-the-box defaults are described above. Namely that the
only virtual topics available must be within the <strong>VirtualTopic.&gt;</strong>
namespace and that the consumer queues are named <strong>Consumer.*.VirtualTopic.&gt;</strong>.</p><p>You
can configure this to use whatever naming convention you wish. The following <a shape="rect"
class="external-link" href="https://svn.apache.org/repos/asf/incubator/activemq/trunk/activemq-unit-tests/src/test/resources/org/apache/activemq/broker/virtual/global-virtual-topics.xml">example</a>
shows how to make all topics virtual topics. The example below is using the name <stron
 g>&gt;</strong> to indicate 'match all topics'. You could use this wildcard
to apply different virtual topic policies in different hierarchies.</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;destinationInterceptors&gt;
+<div class="wiki-content maincontent"><p><em>Virtual Destinations</em>
allow us to create logical destinations that clients can use to produce and consume from but
which map onto one or more <em>physical destinations</em>. It allows us to provide
more flexible loosely coupled messaging configurations.</p><h2 id="VirtualDestinations-VirtualTopics">Virtual
Topics</h2><p>The idea behind <em>publish subscribe</em> is a great
one. Allow producers to be decoupled from consumers so that they do not even know how many
consumers are interested in the messages they publish. The JMS specification defines support
for durable topics however they have limitations as we will describe...</p><h3 id="VirtualDestinations-ThelimitationsofJMSdurabletopics">The
limitations of JMS durable topics</h3><p>A JMS durable subscriber MessageConsumer
is created with a unique JMS clientID and durable subscriber name. To be JMS compliant only
one JMS connection can be active at any point in time for one JMS clientI
 D, and only one consumer can be active for a clientID and subscriber name. i.e., only <strong>one</strong>
thread can be actively consuming from a given logical topic subscriber. This means we cannot
implement</p><ul><li>load balancing of messages.</li><li>fast
failover of the subscriber if that one process running that one consumer thread dies.</li></ul><p>Now
<em>queue</em> semantics in JMS offer the ability to load balance work across
a number of consumers in a reliable way - allowing many threads, processes and machines to
be used to process messages. Then we have sophisticated sticky load balancing techniques like
<a shape="rect" href="message-groups.html">Message Groups</a> to load balance
and parallelise work while maintaining ordering.</p><p>Another added benefit of
having physical queues for each logical topic subscriber is we can them monitor the queue
depths via <a shape="rect" href="jmx.html">JMX</a> to monitor system performance
together with being able to browse these 
 physical queues.</p><h3 id="VirtualDestinations-VirtualTopicstotherescue">Virtual
Topics to the rescue</h3><p>The idea behind virtual topics is that producers send
to a topic in the usual JMS way. Consumers can continue to use the Topic semantics in the
JMS specification. However if the topic is virtual, consumer can consume from a physical queue
for a logical topic subscription, allowing many consumers to be running on many machines &amp;
threads to load balance the load.</p><p>E.g., let's say we have a topic called
<strong>VirtualTopic.Orders</strong>. (Where the prefix VirtualTopic. indicates
its a virtual topic). And we logically want to send orders to systems A and B. Now with regular
durable topics we'd create a JMS consumer for clientID_A and "A" along with clientID_B and
"B".</p><p>With virtual topics we can just go right ahead and consume to queue
<strong>Consumer.A.VirtualTopic.Orders</strong> to be a consumer for system A
or consume to <strong>Consumer.B.VirtualTopic.Orde
 rs</strong> to be a consumer for system B.</p><p>We can now have a pool
of consumers for each system which then compete for messages for systems A or B such that
all the messages for system A are processed exactly once and similarly for system B.</p><h3
id="VirtualDestinations-Customizingtheout-of-the-boxdefaults">Customizing the out-of-the-box
defaults</h3><p>The out-of-the-box defaults are described above. Namely that the
only virtual topics available must be within the <strong>VirtualTopic.&gt;</strong>
namespace and that the consumer queues are named <strong>Consumer.*.VirtualTopic.&gt;</strong>.</p><p>You
can configure this to use whatever naming convention you wish. The following <a shape="rect"
class="external-link" href="https://svn.apache.org/repos/asf/incubator/activemq/trunk/activemq-unit-tests/src/test/resources/org/apache/activemq/broker/virtual/global-virtual-topics.xml">example</a>
shows how to make all topics virtual topics. The example below is using the name <stron
 g>&gt;</strong> to indicate 'match all topics'. You could use this wildcard
to apply different virtual topic policies in different hierarchies.</p><parameter
ac:name="">xml</parameter><plain-text-body>&lt;destinationInterceptors&gt;
   &lt;virtualDestinationInterceptor&gt;
 	&lt;virtualDestinations&gt;
 	  &lt;virtualTopic name="&gt;" prefix="VirtualTopicConsumers.*." selectorAware="false"/&gt;
 	&lt;/virtualDestinations&gt;
   &lt;/virtualDestinationInterceptor&gt;
-&lt;/destinationInterceptors&gt;</pre>
-</div></div><p>Note that making a topic virtual does add a small CPU overhead
when sending messages to the topic but it is fairly small.</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh">Option</th><th
colspan="1" rowspan="1" class="confluenceTh">Default</th><th colspan="1" rowspan="1"
class="confluenceTh">Description</th></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd">selectorAware</td><td colspan="1" rowspan="1" class="confluenceTd">false</td><td
colspan="1" rowspan="1" class="confluenceTd">only messages that match one of the existing
subscribers are actually dispatched. Using this option prevents the build up of unmatched
messages when selectors are used by exclusive consumers</td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd">local</td><td colspan="1" rowspan="1"
class="confluenceTd">false</td><td colspan="1" rowspan="1" class="confluenceTd">when
true, don't fan out messages that were receiv
 ed over a network</td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd">concurrentSend</td><td
colspan="1" rowspan="1" class="confluenceTd">false</td><td colspan="1" rowspan="1"
class="confluenceTd">when true, use an executor to fanout such that sends occur in parallel.
This allows the journal to batch writes which will reduce disk io (5.12)</td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd">transactedSend</td><td colspan="1"
rowspan="1" class="confluenceTd">false</td><td colspan="1" rowspan="1" class="confluenceTd">when
true, use a transaction for fanout sends such that there is a single disk sync. A local broker
transaction will be created if there is no client transaction (5.13)</td></tr></tbody></table></div><p>&#160;</p><h2
id="VirtualDestinations-CompositeDestinations">Composite Destinations</h2><p>Composite
Destinations allow for one-to-many relationships on individual destinations; the main use
case is for <em>composite queues</em>. For example when a mess
 age is sent to queue A you may want to forward it also to queues B and C and topic D. Composite
destinations are then a mapping from a virtual destination to a collection of other physical
destinations. In this case the mapping is broker side and the client is unaware of the mapping
between the destinations. This is different from client side <a shape="rect" href="composite-destinations.html">Composite
Destinations</a> where the client uses a URL notation to specify the actual physical
destinations that a message must be sent to.</p><p>The following <a shape="rect"
class="external-link" href="http://svn.apache.org/repos/asf/incubator/activemq/trunk/activemq-unit-tests/src/test/resources/org/apache/activemq/broker/virtual/composite-queue.xml">example</a>
shows how to set up a <strong>&lt;compositeQueue/&gt;</strong> element
in the XML configuration so that when a message is sent to <code>MY.QUEUE</code>
then it is really forwarded to the physical queue <code>FOO</code> and the topic

 <code>BAR</code>.</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;destinationInterceptors&gt;
+&lt;/destinationInterceptors&gt;</plain-text-body><p>Note that making
a topic virtual does add a small CPU overhead when sending messages to the topic but it is
fairly small.</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th
colspan="1" rowspan="1" class="confluenceTh">Option</th><th colspan="1" rowspan="1"
class="confluenceTh">Default</th><th colspan="1" rowspan="1" class="confluenceTh">Description</th></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd">selectorAware</td><td colspan="1"
rowspan="1" class="confluenceTd">false</td><td colspan="1" rowspan="1" class="confluenceTd">only
messages that match one of the existing subscribers are actually dispatched. Using this option
prevents the build up of unmatched messages when selectors are used by exclusive consumers</td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd">local</td><td colspan="1" rowspan="1"
class="confluenceTd">false</td><td colspan="1" rowspan="1" class="confluenceTd">when
true, d
 on't fan out messages that were received over a network</td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd">concurrentSend</td><td colspan="1"
rowspan="1" class="confluenceTd">false</td><td colspan="1" rowspan="1" class="confluenceTd">when
true, use an executor to fanout such that sends occur in parallel. This allows the journal
to batch writes which will reduce disk io (5.12)</td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd">transactedSend</td><td colspan="1" rowspan="1"
class="confluenceTd">false</td><td colspan="1" rowspan="1" class="confluenceTd">when
true, use a transaction for fanout sends such that there is a single disk sync. A local broker
transaction will be created if there is no client transaction (5.13)</td></tr></tbody></table></div><p>&#160;</p><h2
id="VirtualDestinations-CompositeDestinations">Composite Destinations</h2><p>Composite
Destinations allow for one-to-many relationships on individual destinations; the main use
case is for <em>composit
 e queues</em>. For example when a message is sent to queue A you may want to forward
it also to queues B and C and topic D. Composite destinations are then a mapping from a virtual
destination to a collection of other physical destinations. In this case the mapping is broker
side and the client is unaware of the mapping between the destinations. This is different
from client side <a shape="rect" href="composite-destinations.html">Composite Destinations</a>
where the client uses a URL notation to specify the actual physical destinations that a message
must be sent to.</p><p>The following <a shape="rect" class="external-link"
href="http://svn.apache.org/repos/asf/incubator/activemq/trunk/activemq-unit-tests/src/test/resources/org/apache/activemq/broker/virtual/composite-queue.xml">example</a>
shows how to set up a <strong>&lt;compositeQueue/&gt;</strong> element
in the XML configuration so that when a message is sent to <code>MY.QUEUE</code>
then it is really forwarded to the physical
  queue <code>FOO</code> and the topic <code>BAR</code>.</p><parameter
ac:name="">xml</parameter><plain-text-body>&lt;destinationInterceptors&gt;
   &lt;virtualDestinationInterceptor&gt;
 	&lt;virtualDestinations&gt;
 	  &lt;compositeQueue name="MY.QUEUE"&gt;
@@ -100,15 +88,11 @@
 	  &lt;/compositeQueue&gt;
 	&lt;/virtualDestinations&gt;
   &lt;/virtualDestinationInterceptor&gt;
-&lt;/destinationInterceptors&gt;</pre>
-</div></div><p>By default, subscribers cannot consume messages directly
from a composite queue or topic - it is a logical construct only. Given the configuration
above, subscribers can only consume messages from <code>FOO</code> and <code>BAR</code>;
but not <code>MY.QUEUE</code>.</p><p>This behaviour can be altered
to implement use cases such as watching a queue by sending the same messages to a notification
topic (wire tapping), by setting the optionally set <code>forwardOnly</code> attribute
to false.</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;compositeQueue
name="IncomingOrders" forwardOnly="false"&gt;
+&lt;/destinationInterceptors&gt;</plain-text-body><p>By default, subscribers
cannot consume messages directly from a composite queue or topic - it is a logical construct
only. Given the configuration above, subscribers can only consume messages from <code>FOO</code>
and <code>BAR</code>; but not <code>MY.QUEUE</code>.</p><p>This
behaviour can be altered to implement use cases such as watching a queue by sending the same
messages to a notification topic (wire tapping), by setting the optionally set <code>forwardOnly</code>
attribute to false.</p><parameter ac:name="">xml</parameter><plain-text-body>&lt;compositeQueue
name="IncomingOrders" forwardOnly="false"&gt;
     &lt;forwardTo&gt;
         &lt;topic physicalName="Notifications" /&gt;
     &lt;/forwardTo&gt;
-&lt;/compositeQueue&gt;</pre>
-</div></div><p>Messages sent to <code>IncomingOrders</code>
will all be copied and forwarded to <code>Notifications</code>, before being placed
on the physical <code>IncomingOrders</code> queue for consumption by subscribers.</p><p>Where
the <code>forwardOnly</code> attribute is not defined or is set to <code>true</code>,
there is no logical difference between a <code>compositeQueue</code> and a <code>compositeTopic</code>
- they can be used interchangeably. It is only when a composite destination is made physical
through the use of <code>forwardOnly</code> that the choice of <code>compositeTopic</code>/<code>compositeQueue</code>
has an impact on behavior.</p><h3 id="VirtualDestinations-Usingfiltereddestinations">Using
filtered destinations</h3><p>From Apache ActiveMQ <strong>4.2</strong>
onwards you can now use selectors to define virtual destinations.</p><p>You may
wish to create a virtual destination which forwards messages to multiple destinations but
applying a selector first 
 to decide if the message really does have to go to a particular destination.</p><p>The
following example shows how a message sent to the virtual destination <strong>MY.QUEUE</strong>
will be forwarded to <strong>FOO</strong> and <strong>BAR</strong>
if the selectors match</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;destinationInterceptors&gt;
+&lt;/compositeQueue&gt;</plain-text-body><p>Messages sent to <code>IncomingOrders</code>
will all be copied and forwarded to <code>Notifications</code>, before being placed
on the physical <code>IncomingOrders</code> queue for consumption by subscribers.</p><p>Where
the <code>forwardOnly</code> attribute is not defined or is set to <code>true</code>,
there is no logical difference between a <code>compositeQueue</code> and a <code>compositeTopic</code>
- they can be used interchangeably. It is only when a composite destination is made physical
through the use of <code>forwardOnly</code> that the choice of <code>compositeTopic</code>/<code>compositeQueue</code>
has an impact on behavior.</p><h3 id="VirtualDestinations-Usingfiltereddestinations">Using
filtered destinations</h3><p>From Apache ActiveMQ <strong>4.2</strong>
onwards you can now use selectors to define virtual destinations.</p><p>You may
wish to create a virtual destination which forwards messages to multiple destinations b
 ut applying a selector first to decide if the message really does have to go to a particular
destination.</p><p>The following example shows how a message sent to the virtual
destination <strong>MY.QUEUE</strong> will be forwarded to <strong>FOO</strong>
and <strong>BAR</strong> if the selectors match</p><parameter ac:name="">xml</parameter><plain-text-body>&lt;destinationInterceptors&gt;
   &lt;virtualDestinationInterceptor&gt;
 	&lt;virtualDestinations&gt;
 	  &lt;compositeQueue name="MY.QUEUE"&gt;
@@ -119,17 +103,14 @@
 	  &lt;/compositeQueue&gt;
 	&lt;/virtualDestinations&gt;
   &lt;/virtualDestinationInterceptor&gt;
-&lt;/destinationInterceptors&gt;</pre>
-</div></div><h2 id="VirtualDestinations-AvoidingDuplicateMessageinaNetworkofBrokers">Avoiding
Duplicate Message in a Network of Brokers</h2><p>You have to make sure that the
messages sent to the <strong>Consumer.*.VirtualTopic.&gt;</strong> destination
are not forwarded when you're using both queue-based and non-queue based subscribers to the
virtual topic (that is, if you have normal topic subscribers to the virtual topic). If you
use Virtual Topics in a network of brokers, it is likely you will get duplicate messages if
you use the default network configuration. This is because a network node will not only forward
message sent to the virtual topic, but also the associated physical queues. To fix this, you
should disable forwarding messages on the associated physical queues.</p><p>Here
is an example of how to do that:</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;networkConnectors&gt;
+&lt;/destinationInterceptors&gt;</plain-text-body><h2 id="VirtualDestinations-AvoidingDuplicateMessageinaNetworkofBrokers">Avoiding
Duplicate Message in a Network of Brokers</h2><p>You have to make sure that the
messages sent to the <strong>Consumer.*.VirtualTopic.&gt;</strong> destination
are not forwarded when you're using both queue-based and non-queue based subscribers to the
virtual topic (that is, if you have normal topic subscribers to the virtual topic). If you
use Virtual Topics in a network of brokers, it is likely you will get duplicate messages if
you use the default network configuration. This is because a network node will not only forward
message sent to the virtual topic, but also the associated physical queues. To fix this, you
should disable forwarding messages on the associated physical queues.</p><p>Here
is an example of how to do that:</p><parameter ac:name="">xml</parameter><plain-text-body>
   &lt;networkConnectors&gt;
       &lt;networkConnector uri="static://(tcp://localhost:61617)"&gt;
       	&lt;excludedDestinations&gt;
    	  &lt;queue physicalName="Consumer.*.VirtualTopic.&gt;"/&gt;
       	&lt;/excludedDestinations&gt;
       &lt;/networkConnector&gt;
     &lt;/networkConnectors&gt;
-</pre>
-</div></div></div>
+</plain-text-body></div>
         </td>
         <td valign="top">
           <div class="navigation">

Modified: websites/production/activemq/content/xml-configuration.html
==============================================================================
--- websites/production/activemq/content/xml-configuration.html (original)
+++ websites/production/activemq/content/xml-configuration.html Fri Aug 25 08:24:11 2017
@@ -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 &#8482; -- Xml Configuration
@@ -81,8 +71,7 @@
   <tbody>
         <tr>
         <td valign="top" width="100%">
-<div class="wiki-content maincontent"><p>We support an XML deployment descriptor
for configuring the ActiveMQ Message Broker. There are many things which can be configured
such as</p><ul><li><a shape="rect" href="configuring-version-5-transports.html">transport
connectors</a> which consist of transport channels and wire formats</li><li><a
shape="rect" href="networks-of-brokers.html">network connectors</a> using network
channels or discovery agents</li><li><a shape="rect" href="persistence.html">persistence
providers</a> &amp; locations</li><li>custom message containers (such
as last image caching etc)</li></ul><p>So we decided that using XML would
make this configuration much easier. From version 4.0 onwards we use <a shape="rect" class="external-link"
href="http://xbean.org/" rel="nofollow">XBean</a> to perform the XML configuration.</p><p>For
details of the XML see the <a shape="rect" href="xml-reference.html">Xml Reference</a></p><div
class="confluence-information-macro confluenc
 e-information-macro-warning"><p class="title">Be careful with broker names and URIs</p><span
class="aui-icon aui-icon-small aui-iconfont-error confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>Make sure you do not use any strange
characters in the names of brokers as they are converted to URIs which <a shape="rect"
class="external-link" href="http://java.sun.com/j2se/1.4.2/docs/api/java/net/URI.html" rel="nofollow">do
not allow things like underscores</a> in them etc.</p></div></div><h2
id="XmlConfiguration-Examples">Examples</h2><p>The default ActiveMQ configuration:
<a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/activemq/trunk/assembly/src/release/conf/activemq.xml">current
default config</a>.</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;beans
+<div class="wiki-content maincontent"><p>We support an XML deployment descriptor
for configuring the ActiveMQ Message Broker. There are many things which can be configured
such as</p><ul><li><a shape="rect" href="configuring-version-5-transports.html">transport
connectors</a> which consist of transport channels and wire formats</li><li><a
shape="rect" href="networks-of-brokers.html">network connectors</a> using network
channels or discovery agents</li><li><a shape="rect" href="persistence.html">persistence
providers</a> &amp; locations</li><li>custom message containers (such
as last image caching etc)</li></ul><p>So we decided that using XML would
make this configuration much easier. From version 4.0 onwards we use <a shape="rect" class="external-link"
href="http://xbean.org/" rel="nofollow">XBean</a> to perform the XML configuration.</p><p>For
details of the XML see the <a shape="rect" href="xml-reference.html">Xml Reference</a></p><parameter
ac:name="title">Be careful with broker 
 names and URIs</parameter><rich-text-body><p>Make sure you do not use any
strange characters in the names of brokers as they are converted to URIs which <a shape="rect"
class="external-link" href="http://java.sun.com/j2se/1.4.2/docs/api/java/net/URI.html" rel="nofollow">do
not allow things like underscores</a> in them etc.</p></rich-text-body><h2
id="XmlConfiguration-Examples">Examples</h2><p>The default ActiveMQ configuration:
<a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/activemq/trunk/assembly/src/release/conf/activemq.xml">current
default config</a>.</p><parameter ac:name="">xml</parameter><plain-text-body>&lt;beans
   xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
@@ -181,26 +170,13 @@
         Take a look at ${ACTIVEMQ_HOME}/conf/jetty.xml for more details
     --&gt;
     &lt;import resource="jetty.xml"/&gt;
-&lt;/beans&gt;</pre>
-</div></div><p>From a binary distribution, from version 1.1 onwards there
is an <em>activemq</em> script allowing you to run a Message Broker as a stand
alone process from the command line easily providing the $ACTIVEMQ_HOME/bin directory is on
your PATH.</p><p><strong>AMQ 4.x</strong></p><p>if myConfig.xml
is in the classpath</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;">activemq
 xbean:myConfig.xml
-</pre>
-</div></div><p>or to use the file path system</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;">activemq
 xbean:file:../conf/myConfig.xml
-</pre>
-</div></div><p><strong>AMQ 3.x</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;">activemq
myConfig.xml
-</pre>
-</div></div><p>Or to use the default config file its just</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;">activemq
-</pre>
-</div></div><p>If you have a source distribution you can run a broker using
Maven specifying one of these configuration files as follows<br clear="none"> under
the assembly module run :</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;">maven
server -Dconfig=xbean:file:src/release/conf/activemq.xml
-</pre>
-</div></div><p>If your <a shape="rect" href="initial-configuration.html">classpath
is set up correctly</a> you can achieve the same thing from the command line</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;">java
org.apache.activemq.broker.Main  xbean:file:src/release/conf/activemq.xml
-</pre>
-</div></div><h2 id="XmlConfiguration-Configuringembeddedbrokers">Configuring
embedded brokers</h2><p>You can also use the XML Configuration to configure <a
shape="rect" href="how-do-i-embed-a-broker-inside-a-connection.html">embedded brokers</a>.
For example using the JNDI configuration mechanism you can do the following<br clear="none">
<a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/activemq/trunk/activemq-unit-tests/src/test/java/org/apache/activemq/config/BrokerXmlConfigFromJNDITest.java">BrokerXmlConfigFromJNDITest</a><br
clear="none"> Or of you want to explicitly configure the embedded broker via Java code
you can do the following<br clear="none"> <a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/activemq/trunk/assembly/src/test/java/org/apache/activemq/config/BrokerXmlConfigStartTest.java">BrokerXmlConfigStartTest</a></p><h2
id="XmlConfiguration-UserSubmittedConfigurations">User Submitted Configurations</h2><p>We
have a p
 age which allows users to submit details of their configurations.</p><ul><li><a
shape="rect" href="user-submitted-configurations.html">User Submitted Configurations</a></li></ul><h2
id="XmlConfiguration-Background">Background</h2><p>Since ActiveMQ has so many
strategy pattern plugins for transports, wire formats, persistence and many other things,
we wanted to leave the configuration format open so that you the developer can configure and
extend ActiveMQ in any direction you wish.</p><p>So we use the <a shape="rect"
class="external-link" href="http://www.springframework.org/docs/reference/beans.html#beans-basics"
rel="nofollow">Spring XML</a> configuration file format, which allows any beans /
POJOs to be wired together and configured. However often Spring's XML can be kinda verbose
at times, so we have implemented an ActiveMQ extension to the Spring XML which knows about
the common, standard ActiveMQ things you're likely to do (e.g. tags like connector, wireFormat,
serverTransport,
  persistence) - but at any time you can fall back to the normal Spring way of doing things
(with tags like bean, property etc).</p><p>To see documentation of the XML file
we use or to get access to the XSD/DTD see the <a shape="rect" href="xml-reference.html">Xml
Reference</a></p></div>
+&lt;/beans&gt;</plain-text-body><p>From a binary distribution, from version
1.1 onwards there is an <em>activemq</em> script allowing you to run a Message
Broker as a stand alone process from the command line easily providing the $ACTIVEMQ_HOME/bin
directory is on your PATH.</p><p><strong>AMQ 4.x</strong></p><p>if
myConfig.xml is in the classpath</p><plain-text-body>activemq  xbean:myConfig.xml
+</plain-text-body><p>or to use the file path system</p><plain-text-body>activemq
 xbean:file:../conf/myConfig.xml
+</plain-text-body><p><strong>AMQ 3.x</strong></p><plain-text-body>activemq
myConfig.xml
+</plain-text-body><p>Or to use the default config file its just</p><plain-text-body>activemq
+</plain-text-body><p>If you have a source distribution you can run a broker using
Maven specifying one of these configuration files as follows<br clear="none"> under
the assembly module run :</p><plain-text-body>maven server -Dconfig=xbean:file:src/release/conf/activemq.xml
+</plain-text-body><p>If your <a shape="rect" href="initial-configuration.html">classpath
is set up correctly</a> you can achieve the same thing from the command line</p><plain-text-body>java
org.apache.activemq.broker.Main  xbean:file:src/release/conf/activemq.xml
+</plain-text-body><h2 id="XmlConfiguration-Configuringembeddedbrokers">Configuring
embedded brokers</h2><p>You can also use the XML Configuration to configure <a
shape="rect" href="how-do-i-embed-a-broker-inside-a-connection.html">embedded brokers</a>.
For example using the JNDI configuration mechanism you can do the following<br clear="none">
<a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/activemq/trunk/activemq-unit-tests/src/test/java/org/apache/activemq/config/BrokerXmlConfigFromJNDITest.java">BrokerXmlConfigFromJNDITest</a><br
clear="none"> Or of you want to explicitly configure the embedded broker via Java code
you can do the following<br clear="none"> <a shape="rect" class="external-link" href="https://svn.apache.org/repos/asf/activemq/trunk/assembly/src/test/java/org/apache/activemq/config/BrokerXmlConfigStartTest.java">BrokerXmlConfigStartTest</a></p><h2
id="XmlConfiguration-UserSubmittedConfigurations">User Submitted Configurations</h2><p>We
ha
 ve a page which allows users to submit details of their configurations.</p><ul><li><a
shape="rect" href="user-submitted-configurations.html">User Submitted Configurations</a></li></ul><h2
id="XmlConfiguration-Background">Background</h2><p>Since ActiveMQ has so many
strategy pattern plugins for transports, wire formats, persistence and many other things,
we wanted to leave the configuration format open so that you the developer can configure and
extend ActiveMQ in any direction you wish.</p><p>So we use the <a shape="rect"
class="external-link" href="http://www.springframework.org/docs/reference/beans.html#beans-basics"
rel="nofollow">Spring XML</a> configuration file format, which allows any beans /
POJOs to be wired together and configured. However often Spring's XML can be kinda verbose
at times, so we have implemented an ActiveMQ extension to the Spring XML which knows about
the common, standard ActiveMQ things you're likely to do (e.g. tags like connector, wireFormat,
serverTran
 sport, persistence) - but at any time you can fall back to the normal Spring way of doing
things (with tags like bean, property etc).</p><p>To see documentation of the
XML file we use or to get access to the XSD/DTD see the <a shape="rect" href="xml-reference.html">Xml
Reference</a></p></div>
         </td>
         <td valign="top">
           <div class="navigation">



Mime
View raw message