生活随笔
收集整理的這篇文章主要介紹了
activemq网络桥接_ActiveMQ –经纪人网络解释–第5部分
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
activemq網絡橋接
在前面的第4部分中,我們已經看到了如何使用網絡連接器在隊列中平衡遠程使用者的負載。
在第5部分中,如果主題上同時存在多個遠程持久訂閱者,我們將看到相同的配置如何工作。 考慮以下配置…。
如上所示,我們有Broker-1,它啟動了到Broker-2和Broker-3的兩個網絡連接器。 生產者將消息發(fā)送到Broker-1上的主題“ moo.bar”,而Broker-2具有訂戶C1,而Broker-3具有兩個訂戶C2和C3,主題相同。
您可能會注意到,此設置與第4部分非常相似。 唯一的區(qū)別是,這里我們處理主題,而在第4部分中 ,我們處理隊列。
讓我們看看這個動作
在Broker-1的activemq.xml配置文件中添加以下網絡連接器配置: <networkConnectors>
<networkConnector
name="T:broker1->broker2"
uri="static:(tcp://localhost:61626)"
duplex="false"
decreaseNetworkConsumerPriority="false"
networkTTL="2"
conduitSubscriptions="false"
dynamicOnly="true">
<excludedDestinations>
<queue physicalName=">" />
</excludedDestinations>
</networkConnector>
<networkConnector
name="T:broker1->broker3"
uri="static:(tcp://localhost:61636)"
duplex="false"
decreaseNetworkConsumerPriority="false"
networkTTL="2"
conduitSubscriptions="false"
dynamicOnly="true">
<excludedDestinations>
<queue physicalName=">" />
</excludedDestinations>
</networkConnector>
</networkConnectors> 讓我們按此順序啟動broker-2,broker-3和broker-1。 akuntamukkala@localhost~/apache-activemq-5.8.0/cluster/broker-2/bin$ ./broker-2 consoleakuntamukkala@localhost~/apache-activemq-5.8.0/cluster/broker-3/bin$ ./broker-3 consoleakuntamukkala@localhost~/apache-activemq-5.8.0/cluster/broker-1/bin$ ./broker-1 console Broker-1的管理控制臺連接表明,已經按照從Broker-1到Broker-2和Broker-3的配置分別建立了兩個網絡連接器: | |
| Broker-1的連接@ http:// localhost:8161 / admin / connections.jsp |
讓我們開始在Broker-2上訂閱訂戶C1,訂閱主題“ moo.bar”的消息,在Broker-3上訂閱訂戶C2和C3,訂閱主題相同的消息“ moo.bar”。 持久訂閱者需要客戶端ID和訂閱者名稱的唯一組合。 為了創(chuàng)建持久訂戶C2和C3,我們需要增強/Users/akuntamukkala/apache-activemq-5.8.0/example/src/ConsumerTool.java中提供的功能,其中/Users/akuntamukkala/apache-activemq-5.8 .0是ActiveMQ的安裝目錄。 修改后的代碼包括編輯build.xml和ConsumerTool.java以添加新參數“ subscriberName”。 可以分別從此處和此處獲得已編輯的文件build.xml和ConsumerTool.java。 現在開始訂戶。 akuntamukkala@localhost~/apache-activemq-5.8.0/example$ant consumer -Durl=tcp://localhost:61626 -Dtopic=true -Dsubject=moo.bar -DclientId=C1 -Ddurable=true -DsubscriberName=mb.C1 akuntamukkala@localhost~/apache-activemq-5.8.0/example$ant consumer -Durl=tcp://localhost:61636 -Dtopic=true -Dsubject=moo.bar -DclientId=C2 -Ddurable=true -DsubscriberName=mb.C2 akuntamukkala@localhost~/apache-activemq-5.8.0/example$ant consumer -Durl=tcp://localhost:61636 -Dtopic=true -Dsubject=moo.bar -DclientId=C3 -Ddurable=true -DsubscriberName=mb.C3 Broker-2上的持久訂閱者:
| |
| http:// localhost:9161 / admin / subscribers.jsp |
Broker-3上的持久訂閱者:
| |
| http:// localhost:10161 / admin / subscribers.jsp |
Broker-1上的持久訂戶(由于網絡連接器):
| |
| http:// localhost:8161 / admin / subscribers.jsp |
現在,讓我們向Broker-1上的主題moo.bar發(fā)送10條持久消息。 akuntamukkala@localhost~/apache-activemq-5.8.0/example$ant producer -Durl=tcp://localhost:61616 -Dtopic=true -Dsubject=moo.bar -Dmax=10 -Ddurable=true 請參閱Broker-3上的控制臺:
如您所見,Broker-3收到兩次相同的消息,每個訂閱C2和C3一次。 默認情況下,ActiveMQ不允許處理重復的消息。 發(fā)生這種情況是因為Broker-3上的訂閱mb.C2和mb.C3都傳播到了Broker-1。 因此,當10條消息發(fā)布到Broker-1上的moo.bar時,這些消息將發(fā)送到同一代理Broker-3上的訂戶mb.C2和mb.C3。 由于消息具有相同的ID,因此重復消息將被丟棄,因此警告將顯示在日志消息中……(如步驟19所示)。 這是顯示關于Broker-1的統(tǒng)計信息的控制臺:
| |
| http:// localhost:8161 / admin / subscribers.jsp |
這是顯示關于Broker-3的統(tǒng)計信息的控制臺:
| |
| http:// localhost:10161 / admin / subscribers.jsp |
如您所見,即使入隊計數器顯示為20,出隊計數器也僅顯示10,因為其他10條消息已由Broker-3丟棄。 這是一項有用的功能,有助于確保代理最多處理一次消息。 發(fā)生這種情況的原因是,預訂C2和C3都傳播到上游代理Broker-1。
讓我們在網絡連接器設置中進行一些細微調整來重試相同的場景,方法是將pipelineSubscriptions =“ true”
在兩個網絡連接器上分別從Broker-1到Broker-2和Broker-3。 重新啟動代理后,刪除不活動的持久訂閱者,然后重復上述步驟。
<networkConnectors>
<networkConnector
name="T:broker1->broker2"
uri="static:(tcp://localhost:61626)"
duplex="false"
decreaseNetworkConsumerPriority="false"
networkTTL="2"
conduitSubscriptions="true"
dynamicOnly="true">
<excludedDestinations>
<queue physicalName=">" />
</excludedDestinations>
</networkConnector>
<networkConnector
name="T:broker1->broker3"
uri="static:(tcp://localhost:61636)"
duplex="false"
decreaseNetworkConsumerPriority="false"
networkTTL="2"
conduitSubscriptions="true"
dynamicOnly="true">
<excludedDestinations>
<queue physicalName=">" />
</excludedDestinations>
</networkConnector>
</networkConnectors>
下面的屏幕快照顯示,Broker-1現在僅看到兩個持久訂閱者,每個Broker-1和Broker-3來自一個代理。
| |
| 當conductorSubscriptions =“ true”時,Broker-1中的持久訂戶 |
在Broker-1上發(fā)布10條持久消息后,我們發(fā)現這次沒有相同的重復消息問題。
正如預期的那樣,所有10條消息均由C1,C2和C3處理,如下面的屏幕快照所示。
| |
| Broker-3的持久主題訂戶C2和C3分別接收和處理10條消息 |
因此,我們已經看到了pipelineSubscriptions屬性如何通過避免在代理網絡中重復消息來幫助減少消息流量。
在第6部分中,我們將看到ActiveMQ如何提供“消息重播”功能,以防止消息阻塞的情況。
翻譯自: https://www.javacodegeeks.com/2014/06/activemq-network-of-brokers-explained-part-5.html
activemq網絡橋接
總結
以上是生活随笔為你收集整理的activemq网络桥接_ActiveMQ –经纪人网络解释–第5部分的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。