ActiveMQ –经纪人网络解释–第3部分
現在,我們已經在本博客系列的第1部分和第2 部分中了解了ActiveMQ網絡連接器的基礎,在第3部分中,我們將研究ActiveMQ如何平衡連接到代理網絡的使用者。
介紹
當可以無序處理隊列中的消息時通常使用并發使用者,通常可以提高消息吞吐量。 ActiveMQ代理以循環方式在使用者之間調度消息,以便在并發使用者之間平衡消息消耗,除非將使用者指定為獨占 。
讓我們看下面的示例,其中三個使用者同時處理來自隊列foo.bar的消息。 生產者排隊60條消息,這些消息由三個消費者(每個20位)以循環方式處理。
在隊列foo.bar上啟動三個并發使用者
Ashwinis-MacBook-Pro:example akuntamukkala$ pwd /Users/akuntamukkala/apache-activemq-5.8.0/exampleAshwinis-MacBook-Pro:example akuntamukkala$ ant consumer -Durl=tcp://localhost:61616 -Dtopic=false -Dsubject=foo.bar -DparallelThreads=3 -Dmax=20產生60條消息
Ashwinis-MacBook-Pro:example akuntamukkala$ ant producer -Durl=tcp://localhost:61616 -Dtopic=false -Dsubject=foo.bar -Dmax=60以下屏幕快照顯示了3個使用者正在處理來自隊列foo.bar的消息。 入隊和出隊60條消息。
如下所示,每個使用者處理了20條消息。
以下摘錄自日志,顯示消息被劃分為三個使用者。
[Thread-3] Received: 'Message: 1 sent at: Tue Mar 04 13:46:53 IST 2014 ?...' (length 1000)[Thread-2] Received: 'Message: 0 sent at: Tue Mar 04 13:46:53 IST 2014 ?...' (length 1000)[Thread-1] Received: 'Message: 2 sent at: Tue Mar 04 13:46:53 IST 2014 ?...' (length 1000)[Thread-3] Received: 'Message: 4 sent at: Tue Mar 04 13:46:53 IST 2014 ?...' (length 1000)[Thread-2] Received: 'Message: 3 sent at: Tue Mar 04 13:46:53 IST 2014 ?...' (length 1000)[Thread-1] Received: 'Message: 5 sent at: Tue Mar 04 13:46:53 IST 2014 ?...' (length 1000)[Thread-3] Received: 'Message: 7 sent at: Tue Mar 04 13:46:53 IST 2014 ?...' (length 1000)[Thread-2] Received: 'Message: 6 sent at: Tue Mar 04 13:46:53 IST 2014 ?...' (length 1000)[Thread-1] Received: 'Message: 8 sent at: Tue Mar 04 13:46:53 IST 2014 ?...' (length 1000)[Thread-3] Received: 'Message: 10 sent at: Tue Mar 04 13:46:53 IST 2014 ...' (length 1000)現在,我們已經看到了并發消費者在單個經紀人上的工作方式,現在我們將研究當消費者跨經紀人網絡分布時,它們如何工作。
本地與遠程消費者
讓我們借助下圖所示的配置來探索ActiveMQ如何處理本地和遠程使用者。
消費者1和消費者2分別使用來自Broker-1和Broker-2上的隊列foo.bar的消息。 Broker-1建立了到Broker-2的網絡連接器以轉發隊列消息。 生產者將消息放入Broker-1上的隊列foo.bar中
讓我們看看這個動作
- 編輯Broker-1的配置/Users/akuntamukkala/apache-activemq-5.8.0/bridge-demo/broker-1/conf/activemq.xml并打開與Broker-2的網絡連接器,然后重新啟動Broker-1和Broker-2
- 啟動本地消費者,消費者1
- 啟動遠程使用者Consumer-2
- 在Broker-1上啟動生產者以排隊100條消息
屏幕截圖顯示了Broker-1的隊列:
讓我們看一下消費者,看看消息是如何被分離出來的。
您可能會注意到,ActiveMQ代理將消息均勻地分派給本地使用者,而不是遠程使用者,從而賦予它們相同的優先級。
遠程使用者Consumer-2僅距離代理1跳,其距離配置的networkTTL值2少。
這會導致路由選擇欠佳,尤其是在連接了經紀人時,使得生產者和消費者之間可能有多種路由。 為了確保生產者和消費者之間的最短路徑,最好將其分發給本地消費者,而不是偏遠的消費者。
ActiveMQ提供了一種使用該屬性在本地使用者和遠程使用者之間配置優先級的方法
網絡連接器上的reductionNetworkConsumerPriority。
默認情況下,此值為false,因此將本地和遠程代理視為相同。
如果我們在更改了reduceNetworkConsumerPriority =“ true”之后重復上述步驟,那么我們發現本地消費者Consumer-1的優先級高于遠程消費者Consumer-2,即距離中間商1的路程。
ActiveMQ可以智能地找出消息生產者和消費者之間的代理網絡中的最短路徑。
請閱讀以下鏈接,以進一步了解ActiveMQ的最佳路由。
- http://fusesource.com/docs/esb/4.3/amq_clustering/Networks-OptimizingRoutes.htm l
至此,本系列文章的第3部分結束了,我們看到了如何區分本地和遠程使用者以幫助ActiveMQ確定消息產生者和使用者之間的最佳路徑。
一如既往地歡迎您提出意見。
請繼續關注第4部分,我們將討論遠程并發使用方的負載平衡…
翻譯自: https://www.javacodegeeks.com/2014/04/activemq-network-of-brokers-explained-part-3.html
總結
以上是生活随笔為你收集整理的ActiveMQ –经纪人网络解释–第3部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在没有IDE的情况下编译和运行Java
- 下一篇: 风暴事件处理器–每个工作者的GC日志文件