{"id":26059,"date":"2014-06-04T19:00:10","date_gmt":"2014-06-04T16:00:10","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/?p=26059"},"modified":"2014-06-05T10:35:52","modified_gmt":"2014-06-05T07:35:52","slug":"activemq-network-of-brokers-explained-part-4","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2014\/06\/activemq-network-of-brokers-explained-part-4.html","title":{"rendered":"ActiveMQ &#8211; Network of Brokers Explained &#8211; Part 4"},"content":{"rendered":"<p>In the previous <a href=\"http:\/\/www.javacodegeeks.com\/2014\/04\/activemq-network-of-brokers-explained-part-3.html\">part 3<\/a> , we have seen how ActiveMQ helps distinguish remote consumers from local consumers which helps in determining shorter routes from message producers to consumers.<\/p>\n<p>In this part 4, we will look into how to load balance concurrent consumers on remote brokers.<\/p>\n<p>Let\u2019s consider a bit more advanced configuration to load balance concurrent message consumers on a queue in remote brokers as shown below.<br \/>\n&nbsp;<br \/>\n&nbsp;<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\" align=\"center\">\n<tbody>\n<tr>\n<td><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/06\/part-4-lb-rcc-New-Page-4.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-26174\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/06\/part-4-lb-rcc-New-Page-4.png\" alt=\"part-4-lb-rcc - New Page (4)\" width=\"400\" height=\"214\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/06\/part-4-lb-rcc-New-Page-4.png 1000w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/06\/part-4-lb-rcc-New-Page-4-300x160.png 300w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td>Part 4 &#8211; Network of brokers<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>In the above configuration, we have a message producer sending messages into a queue moo.bar on broker-1. Broker-1 establishes network connectors to broker-2 and broker-3. Consumer C1 consumes messages from queue moo.bar on broker-2 while consumers C2 and C3 are concurrent consumers on queue moo.bar on broker-3.<\/p>\n<h2>Let&#8217;s see this in action<\/h2>\n<p>Let&#8217;s create three brokers instances&#8230;<\/p>\n<ol>\n<li>Ashwinis-MacBook-Pro:bin akuntamukkala$ pwd\/Users\/akuntamukkala\/apache-activemq-5.8.0\/bin<\/li>\n<li>Ashwinis-MacBook-Pro:bin akuntamukkala$.\/activemq-admin create ..\/cluster\/broker-1<\/li>\n<li>Ashwinis-MacBook-Pro:bin akuntamukkala$.\/activemq-admin create ..\/cluster\/broker-2<\/li>\n<li>Ashwinis-MacBook-Pro:bin akuntamukkala$.\/activemq-admin create ..\/cluster\/broker-3<\/li>\n<li>Fix the broker-2 and broker-3 transport, amqp connectors and jetty http port by modifying the corresponding conf\/activemq.xml and conf\/jetty.xml as follows:<br \/>\n&nbsp;<\/p>\n<table border=\"1\">\n<tbody>\n<tr>\n<th>Broker<\/th>\n<th>Openwire Port<\/th>\n<th>Jetty HTTP Port<\/th>\n<th>AMQP Port<\/th>\n<\/tr>\n<tr>\n<td>broker-1<\/td>\n<td>61616<\/td>\n<td>8161<\/td>\n<td>5672<\/td>\n<\/tr>\n<tr>\n<td>broker-2<\/td>\n<td>61626<\/td>\n<td>9161<\/td>\n<td>5682<\/td>\n<\/tr>\n<tr>\n<td>broker-3<\/td>\n<td>61636<\/td>\n<td>10161<\/td>\n<td>5692<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/li>\n<li>Fix network connector on broker-1 such that messages on queues can be forwarded dynamically to consumers on broker-2 and broker-3. This can be done by adding the following XML snippet into broker-1&#8217;s conf\/activemq.xml\n<pre class=\"brush:xml\">&lt;networkConnectors&gt;\r\n    &lt;networkConnector\r\n\r\n      name=\"Q:broker1-&gt;broker2\"\r\n\r\n      uri=\"static:(tcp:\/\/localhost:61626)\"\r\n\r\n      duplex=\"false\"\r\n\r\n      decreaseNetworkConsumerPriority=\"true\"\r\n\r\n      networkTTL=\"2\"\r\n\r\n      dynamicOnly=\"true\"&gt;\r\n\r\n      &lt;excludedDestinations&gt;\r\n\r\n         &lt;topic physicalName=\"&gt;\" \/&gt;\r\n\r\n      &lt;\/excludedDestinations&gt;\r\n    &lt;\/networkConnector&gt;<\/pre>\n<pre class=\"brush:xml\">    &lt;networkConnector\r\n\r\n       name=\"Q:broker1-&gt;broker3\"\r\n\r\n       uri=\"static:(tcp:\/\/localhost:61636)\"\r\n\r\n       duplex=\"false\"\r\n\r\n       decreaseNetworkConsumerPriority=\"true\"\r\n\r\n       networkTTL=\"2\"\r\n\r\n       dynamicOnly=\"true\"&gt;\r\n\r\n       &lt;excludedDestinations&gt;\r\n\r\n            &lt;topic physicalName=\"&gt;\" \/&gt;\r\n\r\n       &lt;\/excludedDestinations&gt;\r\n\r\n    &lt;\/networkConnector&gt;\r\n\r\n&lt;\/networkConnectors&gt;<\/pre>\n<\/li>\n<li>\u00a0Start broker-2, broker-3 and broker-1. We can start these in any order.\n<ol>\n<li>\/apache-activemq-5.8.0\/cluster\/broker-3\/bin$ <b>.\/broker-3 console<\/b><\/li>\n<li>\/apache-activemq-5.8.0\/cluster\/broker-2\/bin$ <b>.\/broker-2 console<\/b><\/li>\n<li>\/apache-activemq-5.8.0\/cluster\/broker-1\/bin$ <b>.\/broker-1 console<\/b><\/li>\n<\/ol>\n<li>Let&#8217;s start the consumers C1 on broker-2 and C2, C3 on broker-3 but on the same queue called &#8220;moo.bar&#8221;\n<ol>\n<li>\/apache-activemq-5.8.0\/example$\u00a0<b>ant consumer -Durl=tcp:\/\/localhost:61626 -Dsubject=moo.bar<\/b><\/li>\n<li>\/apache-activemq-5.8.0\/example$ ant consumer -Durl=tcp:\/\/localhost:61636 -Dsubject=moo.bar -DparallelThreads=2<br \/>\n<blockquote>\n<p>\n<i>The consumer subscriptions are forwarded by broker-2 and broker-3 to their neighboring broker-1 which has a network connector established to both broker-2 and broker-3 by the use of advisory messages.\u00a0<\/i><div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<\/blockquote>\n<\/li>\n<\/ol>\n<li>Let&#8217;s review the broker web consoles to see the queues and corresponding consumers.\n<ol>\n<li>We find that broker-2&#8217;s web console shows one queue &#8220;moo.bar&#8221; having 1 consumer, broker-3&#8217;s web console shows one queue &#8220;moo.bar&#8221; having 2 concurrent consumers<\/li>\n<li>Though there are three consumers (C1 on broker-2 and C2,C3 on broker-3), broker-1 sees only two consumers (representing broker-2 and broker-3).\n<p>&nbsp;<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\" align=\"center\">\n<tbody>\n<tr>\n<td><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/06\/part4-broker1-wc-cf.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-26175\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/06\/part4-broker1-wc-cf.png\" alt=\"part4-broker1-wc-cf\" width=\"400\" height=\"110\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td>http:\/\/localhost:8161\/admin\/queues.jsp<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<br \/>\n<a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/06\/part4-broker1-consumers.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-26176\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/06\/part4-broker1-consumers.png\" alt=\"part4-broker1-consumers\" width=\"400\" height=\"101\" \/><\/a><\/li>\n<li>\n<blockquote>\n<p><i>This is because the network connector from broker-1 to broker-2 and to broker-3 by default has a property &#8220;conduitSubscriptions&#8221; which is true.<br \/>\nDue to which broker-3&#8217;s C2 and C3 which consume messages from the same queue &#8220;moo.bar&#8221; are treated as one consumer in broker-1.<\/i><\/p>\n<\/blockquote>\n<\/li>\n<\/ol>\n<li>Let&#8217;s produce 30 messages into broker-1&#8217;s queue moo.bar and see how the messages are divvied among the consumers C1, C2 and C3:<br \/>\n&nbsp;<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\" align=\"center\">\n<tbody>\n<tr>\n<td><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/06\/part4-rcc-cSt.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-26177\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/06\/part4-rcc-cSt.png\" alt=\"part4-rcc-cSt\" width=\"640\" height=\"320\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/06\/part4-rcc-cSt.png 622w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/06\/part4-rcc-cSt-300x150.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td>Shows how the messages were propagated from producer to consumers C1, C2, C3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ol>\n<p>As seen above, even though there were three consumers and 30 messages, they didn&#8217;t get to process 10 messages each as C2, C3 subscriptions were consolidated into one consumer at broker-1.<\/p>\n<blockquote>\n<p><i>conduitSubscriptions=&#8221;true&#8221; is a useful setting if we were creating subscribers on topics as that would prevent duplicate messages. More on this in part 5.<\/i><\/p>\n<\/blockquote>\n<p>So, in order to make C2 and C3 subscriptions on queue moo.bar propagate to broker-1, let&#8217;s redo the same steps 6, 7, 8, 9 and 10 after setting conduitSubscriptions=&#8221;false&#8221; in broker-1&#8217;s network connector configuration in conf\/activemq.xml.<\/p>\n<p>Here is the new network connector configuration snippet for broker-1:<\/p>\n<pre class=\"brush:xml;highlight:[8,20]\"> &lt;networkConnectors&gt;\r\n  &lt;networkConnector\r\n    name=\"Q:broker1-&gt;broker2\"\r\n    uri=\"static:(tcp:\/\/localhost:61626)\"\r\n    duplex=\"false\"\r\n    decreaseNetworkConsumerPriority=\"true\"\r\n    networkTTL=\"2\"\r\n    conduitSubscriptions=\"false\"\r\n    dynamicOnly=\"true\"&gt;\r\n    &lt;excludedDestinations&gt;\r\n       &lt;topic physicalName=\"&gt;\" \/&gt;\r\n    &lt;\/excludedDestinations&gt;\r\n  &lt;\/networkConnector&gt;\r\n  &lt;networkConnector\r\n    name=\"Q:broker1-&gt;broker3\"\r\n    uri=\"static:(tcp:\/\/localhost:61636)\"\r\n    duplex=\"false\"\r\n    decreaseNetworkConsumerPriority=\"true\"\r\n    networkTTL=\"2\"\r\n    conduitSubscriptions=\"false\"\r\n    dynamicOnly=\"true\"&gt;\r\n    &lt;excludedDestinations&gt;\r\n       &lt;topic physicalName=\"&gt;\" \/&gt;\r\n    &lt;\/excludedDestinations&gt;\r\n  &lt;\/networkConnector&gt;\r\n&lt;\/networkConnectors&gt;<\/pre>\n<p>Upon restarting the brokers and consumers C1, C2 and C3 and producing 30 messages into broker-1&#8217;s moo.bar queue, we find that all of the three consumer subscriptions are visible at broker-1. As a result broker-1 dispatches 10 messages to each of the consumers in a round-robin fashion to load balance. This is depicted pictorially below.<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\" align=\"center\">\n<tbody>\n<tr>\n<td><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/06\/part4-broker-1-cc.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-26178\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/06\/part4-broker-1-cc.png\" alt=\"part4-broker-1-cc\" width=\"640\" height=\"310\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td>Shows how the messages were propagated from producer to consumers C1, C2, C3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<br \/>\nBroker-1&#8217;s web console @http:\/\/localhost:8161\/admin\/queueConsumers.jsp?JMSDestination=moo.bar shows that broker-1 now sees 3 consumers and dispatches 10 messages to each consumer.<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/06\/part4-broker-1.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-26179\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/06\/part4-broker-1.png\" alt=\"part4-broker-1\" width=\"640\" height=\"248\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/06\/part4-broker-1.png 783w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/06\/part4-broker-1-300x116.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>Thus in this part 4 of the blog series, we have seen how we can load balance remote concurrent consumers which are consuming messages from a queue.<\/p>\n<p>As always, your comments and feedback is appreciated!<\/p>\n<p>In the next part 5, we will explore how the same scenario will play out if we were to use a topic instead of a queue. Stay tuned&#8230;<\/p>\n<h2>Resources<\/h2>\n<ul>\n<li><a href=\"http:\/\/fusesource.com\/docs\/esb\/4.3\/amq_clustering\/Networks-Connectors.html\">http:\/\/fusesource.com\/docs\/esb\/4.3\/amq_clustering\/Networks-Connectors.html<\/a><\/li>\n<li>The configuration files (activemq.xml and jetty.xml) of all the brokers used in this blog are available <a href=\"https:\/\/drive.google.com\/folderview?id=0B6UoSlNMfxQOWDdwVWp2SEJlSmc&amp;usp=sharing\" target=\"_blank\">here<\/a>.<\/li>\n<\/ul>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"http:\/\/akuntamukkala.blogspot.com\/2014\/03\/activemq-network-of-brokers-explained_26.html\">ActiveMQ &#8211; Network of Brokers Explained &#8211; Part 4<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/jcg\">JCG partner<\/a> Ashwini Kuntamukkala at the <a href=\"http:\/\/akuntamukkala.blogspot.com\/\">Ashwini Kuntamukkala &#8211; Technology Enthusiast<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In the previous part 3 , we have seen how ActiveMQ helps distinguish remote consumers from local consumers which helps in determining shorter routes from message producers to consumers. In this part 4, we will look into how to load balance concurrent consumers on remote brokers. Let\u2019s consider a bit more advanced configuration to load &hellip;<\/p>\n","protected":false},"author":547,"featured_media":48,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[173,59],"class_list":["post-26059","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-apache-activemq","tag-jms"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>ActiveMQ - Network of Brokers Explained - Part 4<\/title>\n<meta name=\"description\" content=\"In the previous part 3 , we have seen how ActiveMQ helps distinguish remote consumers from local consumers which helps in determining shorter routes from\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2014\/06\/activemq-network-of-brokers-explained-part-4.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ActiveMQ - Network of Brokers Explained - Part 4\" \/>\n<meta property=\"og:description\" content=\"In the previous part 3 , we have seen how ActiveMQ helps distinguish remote consumers from local consumers which helps in determining shorter routes from\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2014\/06\/activemq-network-of-brokers-explained-part-4.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2014-06-04T16:00:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-06-05T07:35:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/apache-activemq-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Ashwini Kuntamukkala\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/akuntamukkala\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ashwini Kuntamukkala\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/activemq-network-of-brokers-explained-part-4.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/activemq-network-of-brokers-explained-part-4.html\"},\"author\":{\"name\":\"Ashwini Kuntamukkala\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/d48995ed879ff58e7d32f6f45df756d2\"},\"headline\":\"ActiveMQ &#8211; Network of Brokers Explained &#8211; Part 4\",\"datePublished\":\"2014-06-04T16:00:10+00:00\",\"dateModified\":\"2014-06-05T07:35:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/activemq-network-of-brokers-explained-part-4.html\"},\"wordCount\":808,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/activemq-network-of-brokers-explained-part-4.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/apache-activemq-logo.jpg\",\"keywords\":[\"Apache ActiveMQ\",\"JMS\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/activemq-network-of-brokers-explained-part-4.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/activemq-network-of-brokers-explained-part-4.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/activemq-network-of-brokers-explained-part-4.html\",\"name\":\"ActiveMQ - Network of Brokers Explained - Part 4\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/activemq-network-of-brokers-explained-part-4.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/activemq-network-of-brokers-explained-part-4.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/apache-activemq-logo.jpg\",\"datePublished\":\"2014-06-04T16:00:10+00:00\",\"dateModified\":\"2014-06-05T07:35:52+00:00\",\"description\":\"In the previous part 3 , we have seen how ActiveMQ helps distinguish remote consumers from local consumers which helps in determining shorter routes from\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/activemq-network-of-brokers-explained-part-4.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/activemq-network-of-brokers-explained-part-4.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/activemq-network-of-brokers-explained-part-4.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/apache-activemq-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/apache-activemq-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/06\\\/activemq-network-of-brokers-explained-part-4.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"ActiveMQ &#8211; Network of Brokers Explained &#8211; Part 4\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/d48995ed879ff58e7d32f6f45df756d2\",\"name\":\"Ashwini Kuntamukkala\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/db91d54d3feefca7c2a64d2de4b2bbaa3eba8c0b7453ec714f7d0592e1225c75?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/db91d54d3feefca7c2a64d2de4b2bbaa3eba8c0b7453ec714f7d0592e1225c75?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/db91d54d3feefca7c2a64d2de4b2bbaa3eba8c0b7453ec714f7d0592e1225c75?s=96&d=mm&r=g\",\"caption\":\"Ashwini Kuntamukkala\"},\"description\":\"Ashwini is an open source, cloud and mobile development enthusiast. He has over 10 years of experience in leading and implementing several enterprise grade solutions in pharmacy, health care and travel industries. He is currently working as a Software Architect at SciSpike, Inc where they help their clients adopt best enterprise software development\\\/governance practices through consulting, training and software development services. When not working and having fun with his family, he finds time to blog key ideas that he discovers when solving challenging problems.\",\"sameAs\":[\"http:\\\/\\\/akuntamukkala.blogspot.gr\\\/\",\"http:\\\/\\\/www.linkedin.com\\\/pub\\\/ashwini-kuntamukkala\\\/25\\\/41b\\\/754\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/akuntamukkala\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/ashwini-kuntamukkala\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ActiveMQ - Network of Brokers Explained - Part 4","description":"In the previous part 3 , we have seen how ActiveMQ helps distinguish remote consumers from local consumers which helps in determining shorter routes from","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2014\/06\/activemq-network-of-brokers-explained-part-4.html","og_locale":"en_US","og_type":"article","og_title":"ActiveMQ - Network of Brokers Explained - Part 4","og_description":"In the previous part 3 , we have seen how ActiveMQ helps distinguish remote consumers from local consumers which helps in determining shorter routes from","og_url":"https:\/\/www.javacodegeeks.com\/2014\/06\/activemq-network-of-brokers-explained-part-4.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2014-06-04T16:00:10+00:00","article_modified_time":"2014-06-05T07:35:52+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/apache-activemq-logo.jpg","type":"image\/jpeg"}],"author":"Ashwini Kuntamukkala","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/akuntamukkala","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Ashwini Kuntamukkala","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/activemq-network-of-brokers-explained-part-4.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/activemq-network-of-brokers-explained-part-4.html"},"author":{"name":"Ashwini Kuntamukkala","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/d48995ed879ff58e7d32f6f45df756d2"},"headline":"ActiveMQ &#8211; Network of Brokers Explained &#8211; Part 4","datePublished":"2014-06-04T16:00:10+00:00","dateModified":"2014-06-05T07:35:52+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/activemq-network-of-brokers-explained-part-4.html"},"wordCount":808,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/activemq-network-of-brokers-explained-part-4.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/apache-activemq-logo.jpg","keywords":["Apache ActiveMQ","JMS"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2014\/06\/activemq-network-of-brokers-explained-part-4.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/activemq-network-of-brokers-explained-part-4.html","url":"https:\/\/www.javacodegeeks.com\/2014\/06\/activemq-network-of-brokers-explained-part-4.html","name":"ActiveMQ - Network of Brokers Explained - Part 4","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/activemq-network-of-brokers-explained-part-4.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/activemq-network-of-brokers-explained-part-4.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/apache-activemq-logo.jpg","datePublished":"2014-06-04T16:00:10+00:00","dateModified":"2014-06-05T07:35:52+00:00","description":"In the previous part 3 , we have seen how ActiveMQ helps distinguish remote consumers from local consumers which helps in determining shorter routes from","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/activemq-network-of-brokers-explained-part-4.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2014\/06\/activemq-network-of-brokers-explained-part-4.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/activemq-network-of-brokers-explained-part-4.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/apache-activemq-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/apache-activemq-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2014\/06\/activemq-network-of-brokers-explained-part-4.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"ActiveMQ &#8211; Network of Brokers Explained &#8211; Part 4"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/d48995ed879ff58e7d32f6f45df756d2","name":"Ashwini Kuntamukkala","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/db91d54d3feefca7c2a64d2de4b2bbaa3eba8c0b7453ec714f7d0592e1225c75?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/db91d54d3feefca7c2a64d2de4b2bbaa3eba8c0b7453ec714f7d0592e1225c75?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/db91d54d3feefca7c2a64d2de4b2bbaa3eba8c0b7453ec714f7d0592e1225c75?s=96&d=mm&r=g","caption":"Ashwini Kuntamukkala"},"description":"Ashwini is an open source, cloud and mobile development enthusiast. He has over 10 years of experience in leading and implementing several enterprise grade solutions in pharmacy, health care and travel industries. He is currently working as a Software Architect at SciSpike, Inc where they help their clients adopt best enterprise software development\/governance practices through consulting, training and software development services. When not working and having fun with his family, he finds time to blog key ideas that he discovers when solving challenging problems.","sameAs":["http:\/\/akuntamukkala.blogspot.gr\/","http:\/\/www.linkedin.com\/pub\/ashwini-kuntamukkala\/25\/41b\/754","https:\/\/x.com\/https:\/\/twitter.com\/akuntamukkala"],"url":"https:\/\/www.javacodegeeks.com\/author\/ashwini-kuntamukkala"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/26059","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/547"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=26059"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/26059\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/48"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=26059"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=26059"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=26059"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}