{"id":24172,"date":"2014-04-17T16:00:48","date_gmt":"2014-04-17T13:00:48","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/?p=24172"},"modified":"2014-04-17T09:59:28","modified_gmt":"2014-04-17T06:59:28","slug":"activemq-network-of-brokers-explained","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2014\/04\/activemq-network-of-brokers-explained.html","title":{"rendered":"ActiveMQ &#8211; Network of Brokers Explained"},"content":{"rendered":"<h2>Objective<\/h2>\n<p>This 7 part blog series is to share about how to create network of ActiveMQ brokers in order to achieve high availability and scalability.<\/p>\n<h3>Why network of brokers?<\/h3>\n<p>ActiveMQ message broker is a core component of messaging infrastructure in an enterprise. It needs to be highly available and dynamically scalable to facilitate communication between dynamic heterogeneous distributed applications which have varying capacity needs.<\/p>\n<p>Scaling enterprise applications on commodity hardware is a rage nowadays. ActiveMQ caters to that very well by being able to create a network of brokers to share the load.<\/p>\n<p>Many times applications running across geographically distributed data centers need to coordinate messages. Running message producers and consumers across geographic regions\/data centers can be architected better using network of brokers.<\/p>\n<p>ActiveMQ uses transport connectors over which it communicates with message producers and consumers. However, in order to facilitate broker to broker communication, ActiveMQ uses <b>network connectors<\/b>.<\/p>\n<blockquote>\n<p>A network connector is a bridge between two brokers which allows on-demand message forwarding.<\/p>\n<\/blockquote>\n<p>In other words, if Broker B1 initiates a network connector to Broker B2 then the messages on a channel (queue\/topic) on B1 get forwarded to B2 if there is at least one consumer on B2 for the same channel. If the network connector was configured to be duplex, the messages get forwarded from B2 to B1 on demand.<\/p>\n<p>This is very interesting because it is now possible for brokers to communicate with each other dynamically.<\/p>\n<p>In this 7 part blog series, we will look into the following topics to gain understanding of this very powerful ActiveMQ feature:<\/p>\n<ol>\n<ol>\n<li>Network Connector Basics &#8211; Part 1<\/li>\n<li>Duplex network connectors &#8211; Part 2<\/li>\n<li>Load balancing consumers on local\/remote brokers &#8211; Part 3<\/li>\n<li>Load-balance consumers\/subscribers on remote brokers\n<ol>\n<li>Queue: Load balance remote concurrent consumers\u00a0&#8211; Part 4<\/li>\n<li>Topic: Load Balance Durable Subscriptions on Remote Brokers &#8211; Part 5<\/li>\n<\/ol>\n<\/li>\n<li>Store\/Forward messages and consumer failover\u00a0\u00a0&#8211; Part 6\n<ol>\n<li>How to prevent stuck\u00a0\u00a0messages<\/li>\n<\/ol>\n<\/li>\n<li>Virtual Destinations &#8211; Part 7<\/li>\n<\/ol>\n<\/ol>\n<p>To give credit where it is due, the following URLs have helped me in creating this blog post series.<\/p>\n<ol>\n<li><a href=\"http:\/\/www.slideshare.net\/dejanb\/advanced-messaging-with-apache-activemq\" target=\"_blank\">Advanced Messaging with ActiveMQ<\/a>\u00a0by\u00a0<a href=\"https:\/\/twitter.com\/dejanb\" target=\"_blank\">Dejan Bosanac<\/a>\u00a0[Slides\u00a032-36]<\/li>\n<li><a href=\"http:\/\/www.jakubkorab.net\/2011\/11\/understanding-activemq-broker-networks.html\" target=\"_blank\">Understanding ActiveMQ Broker Networks<\/a>\u00a0by\u00a0<a href=\"https:\/\/twitter.com\/jakekorab\" target=\"_blank\">Jakub Korab<\/a><\/li>\n<\/ol>\n<h4>Prerequisites<\/h4>\n<ol>\n<li>ActiveMQ 5.8.0 \u2013 To create broker instances<\/li>\n<li>Apache Ant \u2013 To run ActiveMQ sample producer and consumers for demo.<\/li>\n<\/ol>\n<p>We will use multiple ActiveMQ broker instances on the same machine for the ease of demonstration.<\/p>\n<h2>Network Connector Basics &#8211; Part 1<\/h2>\n<p>The following diagram shows how a network connector functions. It bridges two brokers and is used to forward messages from Broker-1 to Broker-2 on demand if established by Broker-1 to Broker-2.<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/NC.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-24257\" alt=\"NC\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/NC.png\" width=\"400\" height=\"146\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/NC.png 624w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/NC-300x110.png 300w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/a><\/p>\n<p>A network connector can be duplex so messages could be forwarded in the opposite direction; from Broker-2 to Broker-1, once there is a consumer on Broker-1 for a channel which exists in Broker-2. More on this in Part 2<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<h3>Setup network connector between broker-1 and broker-2<\/h3>\n<ul>\n<li>Create two broker instances, say broker-1 and broker-2<\/li>\n<\/ul>\n<pre class=\"brush:bash\">Ashwinis-MacBook-Pro:bin akuntamukkala$ pwd\r\n\/Users\/akuntamukkala\/apache-activemq-5.8.0\/bin\r\nAshwinis-MacBook-Pro:bin akuntamukkala$ .\/activemq-admin create ..\/bridge-demo\/broker-1<\/pre>\n<pre class=\"brush:bash\">Ashwinis-MacBook-Pro:bin akuntamukkala$ .\/activemq-admin create ..\/bridge-demo\/broker-2<\/pre>\n<p>Since we will be running both brokers on the same machine, let&#8217;s configure broker-2 such that there are no port conflicts.<\/p>\n<ul>\n<li>Edit\n<pre class=\"brush:bash\">\/Users\/akuntamukkala\/apache-activemq-5.8.0\/bridge-demo\/broker-2\/conf\/activemq.xml<\/pre>\n<\/li>\n<\/ul>\n<ol>\n<ol>\n<li>Change transport connector to 61626 from 61616<\/li>\n<li>Change AMQP port from 5672 to 6672 (won&#8217;t be using it for this blog)<\/li>\n<\/ol>\n<\/ol>\n<ul>\n<li>Edit\n<pre class=\"brush:bash\">\/Users\/akuntamukkala\/apache-activemq-5.8.0\/bridge-demo\/broker-2\/conf\/jetty.xml<\/pre>\n<\/li>\n<\/ul>\n<ol>\n<ol>\n<li>Change web console port to 9161 from 8161<\/li>\n<\/ol>\n<\/ol>\n<ul>\n<li>Configure Network Connector from broker-1 to broker-2<br \/>\nAdd the following XML snippet to\u00a0<\/p>\n<pre class=\"brush:bash\">\/Users\/akuntamukkala\/apache-activemq-5.8.0\/bridge-demo\/broker-1\/conf\/activemq.xml<\/pre>\n<\/li>\n<\/ul>\n<pre class=\"brush:xml\">networkConnectors&gt;\r\n         &lt;networkConnector \r\n            name=\"T:broker1-&gt;broker2\" \r\n            uri=\"static:(tcp:\/\/localhost:61626)\" \r\n            duplex=\"false\" \r\n            decreaseNetworkConsumerPriority=\"true\" \r\n            networkTTL=\"2\" \r\n            dynamicOnly=\"true\"&gt;\r\n            &lt;excludedDestinations&gt;\r\n                  &lt;queue physicalName=\"&gt;\" \/&gt;\r\n            &lt;\/excludedDestinations&gt;\r\n         &lt;\/networkConnector&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            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>The above XML snippet configures two network connectors &#8220;T:broker1-&gt;broker2&#8221; (only topics as queues are excluded) and &#8220;Q:broker1-&gt;broker2&#8221; \u00a0(only queues as topics are excluded). This allows for nice separation between network connectors used for topics and queues.<\/p>\n<p>The name can be arbitrary although I prefer to specify the [type]:->[destination broker].<\/p>\n<p>The URI attribute specifies how to connect to broker-2<\/p>\n<ul>\n<li>Start broker-2<\/li>\n<\/ul>\n<pre class=\"brush:bash\">Ashwinis-MacBook-Pro:bin akuntamukkala$ pwd\r\n\/Users\/akuntamukkala\/apache-activemq-5.8.0\/bridge-demo\/broker-2\/bin<\/pre>\n<pre class=\"brush:bash\">Ashwinis-MacBook-Pro:bin akuntamukkala$ .\/broker-2 console<\/pre>\n<ul>\n<li>Start broker-1<\/li>\n<\/ul>\n<pre class=\"brush:bash\">Ashwinis-MacBook-Pro:bin akuntamukkala$ pwd\r\n\/Users\/akuntamukkala\/apache-activemq-5.8.0\/bridge-demo\/broker-1\/bin<\/pre>\n<pre class=\"brush:bash\">Ashwinis-MacBook-Pro:bin akuntamukkala$ .\/broker-1 console<\/pre>\n<p>Logs on broker-1 show 2 network connectors being established with broker-2<\/p>\n<pre class=\"brush:bash wrap-lines:false\"> INFO | Establishing network connection from vm:\/\/broker-1?async=false&network=true to tcp:\/\/localhost:61626\r\n INFO | Connector vm:\/\/broker-1 Started\r\n INFO | Establishing network connection from vm:\/\/broker-1?async=false&network=true to tcp:\/\/localhost:61626\r\n INFO | Network connection between vm:\/\/broker-1#24 and tcp:\/\/localhost\/127.0.0.1:61626@52132(broker-2) has been established.\r\n INFO | Network connection between vm:\/\/broker-1#26 and tcp:\/\/localhost\/127.0.0.1:61626@52133(broker-2) has been established.<\/pre>\n<p>Web Console on broker-1 @ http:\/\/localhost:8161\/admin\/connections.jsp shows the two network connectors established to broker-2<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-1-NCs.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-24258\" alt=\"broker-1-NCs\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-1-NCs.png\" width=\"640\" height=\"76\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-1-NCs.png 1600w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-1-NCs-300x36.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-1-NCs-1024x122.png 1024w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>The same on broker-2 does not show any network connectors since no network connectors were initiated by broker-2<\/p>\n<h2>Let&#8217;s see this in action<\/h2>\n<p>Let&#8217;s produce 100 persistent messages on a queue called &#8220;foo.bar&#8221; on broker-1.<\/p>\n<pre class=\"brush:bash\">Ashwinis-MacBook-Pro:example akuntamukkala$ pwd\r\n\/Users\/akuntamukkala\/apache-activemq-5.8.0\/example\r\nAshwinis-MacBook-Pro:example akuntamukkala$ ant producer -Durl=tcp:\/\/localhost:61616 -Dtopic=false -Ddurable=true -Dsubject=foo.bar -Dmax=100\r\n<\/pre>\n<p>broker-1 web console shows that 100 messages have been enqueued in queue &#8220;foo.bar&#8221;<\/p>\n<p>http:\/\/localhost:8161\/admin\/queues.jsp<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-1-100msgs-produced.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-24259\" alt=\"broker-1-100msgs-produced\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-1-100msgs-produced.png\" width=\"640\" height=\"169\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-1-100msgs-produced.png 778w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-1-100msgs-produced-300x79.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>Let&#8217;s start a consumer on a queue called &#8220;foo.bar&#8221; on broker-2. The important thing to note here is that the destination name &#8220;foo.bar&#8221; should match exactly.<\/p>\n<pre class=\"brush:bash\">Ashwinis-MacBook-Pro:example akuntamukkala$ ant consumer -Durl=tcp:\/\/localhost:61626 -Dtopic=false -Dsubject=foo.bar <\/pre>\n<p>We find that all the 100 messages from broker-1&#8217;s foo.bar queue get forwarded to broker-2&#8217;s foo.bar queue consumer.<\/p>\n<p>broker-1 admin console at http:\/\/localhost:8161\/admin\/queues.jsp<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-1-100msgs-consumed.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-24260\" alt=\"broker-1-100msgs-consumed\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-1-100msgs-consumed.png\" width=\"640\" height=\"140\" \/><\/a><\/p>\n<p>broker-2 admin console @ http:\/\/localhost:9161\/admin\/queues.jsp shows that the consumer we had started has consumed all 100 messages which were forwarded on-demand from broker-1<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-2-dequeue.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-24261\" alt=\"broker-2-dequeue\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-2-dequeue.png\" width=\"640\" height=\"78\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-2-dequeue.png 1600w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-2-dequeue-300x36.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-2-dequeue-1024x125.png 1024w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>broker-2 consumer details on foo.bar queue<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-2-consumer-details.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-24262\" alt=\"broker-2-consumer-details\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-2-consumer-details.png\" width=\"640\" height=\"64\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-2-consumer-details.png 1600w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-2-consumer-details-300x30.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-2-consumer-details-1024x104.png 1024w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>broker-1 admin console shows that all 100 messages have been dequeued [forwarded to broker-2 via the network connector].<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-1-nc-queue-consumer.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-24263\" alt=\"broker-1-nc-queue-consumer\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-1-nc-queue-consumer.png\" width=\"640\" height=\"70\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-1-nc-queue-consumer.png 1600w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-1-nc-queue-consumer-300x32.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-1-nc-queue-consumer-1024x112.png 1024w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p>broker-1 consumer details on &#8220;foo.bar&#8221; queue shows that the consumer is created on demand: [name of connector]_[destination broker]_inbound_<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-1-nc-consumer-details.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-24264\" alt=\"broker-1-nc-consumer-details\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2014\/04\/broker-1-nc-consumer-details.png\" width=\"640\" height=\"66\" \/><\/a><\/p>\n<p>Thus we have seen the basics of network connector in ActiveMQ.<\/p>\n<p>Stay tuned for Part 2&#8230;<\/p>\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\/02\/activemq-network-of-brokers-explained.html\">ActiveMQ &#8211; Network of Brokers Explained<\/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>Objective This 7 part blog series is to share about how to create network of ActiveMQ brokers in order to achieve high availability and scalability. Why network of brokers? ActiveMQ message broker is a core component of messaging infrastructure in an enterprise. It needs to be highly available and dynamically scalable to facilitate communication between &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-24172","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<\/title>\n<meta name=\"description\" content=\"Objective This 7 part blog series is to share about how to create network of ActiveMQ brokers in order to achieve high availability and scalability. Why\" \/>\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\/04\/activemq-network-of-brokers-explained.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\" \/>\n<meta property=\"og:description\" content=\"Objective This 7 part blog series is to share about how to create network of ActiveMQ brokers in order to achieve high availability and scalability. Why\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2014\/04\/activemq-network-of-brokers-explained.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-04-17T13:00:48+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=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/04\\\/activemq-network-of-brokers-explained.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/04\\\/activemq-network-of-brokers-explained.html\"},\"author\":{\"name\":\"Ashwini Kuntamukkala\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/d48995ed879ff58e7d32f6f45df756d2\"},\"headline\":\"ActiveMQ &#8211; Network of Brokers Explained\",\"datePublished\":\"2014-04-17T13:00:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/04\\\/activemq-network-of-brokers-explained.html\"},\"wordCount\":871,\"commentCount\":5,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/04\\\/activemq-network-of-brokers-explained.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\\\/04\\\/activemq-network-of-brokers-explained.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/04\\\/activemq-network-of-brokers-explained.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/04\\\/activemq-network-of-brokers-explained.html\",\"name\":\"ActiveMQ - Network of Brokers Explained\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/04\\\/activemq-network-of-brokers-explained.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/04\\\/activemq-network-of-brokers-explained.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/apache-activemq-logo.jpg\",\"datePublished\":\"2014-04-17T13:00:48+00:00\",\"description\":\"Objective This 7 part blog series is to share about how to create network of ActiveMQ brokers in order to achieve high availability and scalability. Why\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/04\\\/activemq-network-of-brokers-explained.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/04\\\/activemq-network-of-brokers-explained.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2014\\\/04\\\/activemq-network-of-brokers-explained.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\\\/04\\\/activemq-network-of-brokers-explained.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\"}]},{\"@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","description":"Objective This 7 part blog series is to share about how to create network of ActiveMQ brokers in order to achieve high availability and scalability. Why","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\/04\/activemq-network-of-brokers-explained.html","og_locale":"en_US","og_type":"article","og_title":"ActiveMQ - Network of Brokers Explained","og_description":"Objective This 7 part blog series is to share about how to create network of ActiveMQ brokers in order to achieve high availability and scalability. Why","og_url":"https:\/\/www.javacodegeeks.com\/2014\/04\/activemq-network-of-brokers-explained.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2014-04-17T13:00:48+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":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2014\/04\/activemq-network-of-brokers-explained.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/04\/activemq-network-of-brokers-explained.html"},"author":{"name":"Ashwini Kuntamukkala","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/d48995ed879ff58e7d32f6f45df756d2"},"headline":"ActiveMQ &#8211; Network of Brokers Explained","datePublished":"2014-04-17T13:00:48+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/04\/activemq-network-of-brokers-explained.html"},"wordCount":871,"commentCount":5,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/04\/activemq-network-of-brokers-explained.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\/04\/activemq-network-of-brokers-explained.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2014\/04\/activemq-network-of-brokers-explained.html","url":"https:\/\/www.javacodegeeks.com\/2014\/04\/activemq-network-of-brokers-explained.html","name":"ActiveMQ - Network of Brokers Explained","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/04\/activemq-network-of-brokers-explained.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/04\/activemq-network-of-brokers-explained.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/apache-activemq-logo.jpg","datePublished":"2014-04-17T13:00:48+00:00","description":"Objective This 7 part blog series is to share about how to create network of ActiveMQ brokers in order to achieve high availability and scalability. Why","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2014\/04\/activemq-network-of-brokers-explained.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2014\/04\/activemq-network-of-brokers-explained.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2014\/04\/activemq-network-of-brokers-explained.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\/04\/activemq-network-of-brokers-explained.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"}]},{"@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\/24172","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=24172"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/24172\/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=24172"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=24172"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=24172"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}