我有一對經紀人配置爲具有ActiveMQ 5.5.1的經紀人網絡。每個代理都存在於通過WAN進行通信的服務器上。配置經紀人網絡排隊消費者永遠不會成爲本地主機,除非經紀商出現故障
BrokerA在ServerA ServerB上
<amq:broker useJmx="false" persistent="false">
<amq:networkConnectors>
<amq:networkConnector uri="static:(tcp://BrokerA:61616)" duplex="true" />
</amq:networkConnectors>
<amq:transportConnectors>
<amq:transportConnector uri="tcp://BrokerB:61616" />
</amq:transportConnectors>
</amq:broker>
在每個服務器上
<amq:broker useJmx="false" persistent="false">
<amq:networkConnectors>
<amq:networkConnector uri="static:(tcp://BrokerB:61616)" duplex="true" />
</amq:networkConnectors>
<amq:transportConnectors>
<amq:transportConnector uri="tcp://BrokerA:61616" />
</amq:transportConnectors>
</amq:broker>
BrokerB,我有一個創建了以下主題和隊列Java服務運行:
<amq:queue id="myQueue" physicalName="myQueue" />
<amq:topic id="myTopic" physicalName="MyTopic" />
java服務(在每個服務器上)爲myQueue以及myTopic創建生產者和消費者。我希望兩個消費者都可以通過myTopic接收所有主題消息。問題在於myQueue。我只想配置的代理消費myQueue消息。例如,如果BrokerA在ServerA上生成服務消息,我只希望ServerB上的BrokerB使用該消息。現在在我的測試中,我看到BrokerA消耗的ServerA上消耗的大約50%的消息和BrokerB消耗的消息中的50%。此外,如果BrokerB下線,則BrokerA必須接受來自ServerA和ServerB的所有消息,並消費所有消息,直到BrokerB恢復聯機爲止。
我曾考慮過使用消息組,但是我無法想出一個好方法來檢測何時發生故障以切換髮送消息的組。任何建議將不勝感激!
Boday也,你會恢復到遠程代理,我試圖排除_myQueue_消息被本地消費代理,而不是 配置的代理。因此,如果ServerA上的生產者向BrokerA發送消息,我總是希望BrokerB使用ServerA上的生產者的消息(除非BrokerB關閉)。我應該提到我正在使用ActiveMQ 5.5.1。似乎_priorityBackup_是5.6中添加的功能。 –
2012-03-15 17:10:00
lew,仍然可以使用?randomize = false來確保連接到第一個代理,等等。否則,您也可以使用隊列命名約定來劃分隊列,甚至使用授權來限制對某些用戶的隊列訪問http://activemq.apache.org/security.html)... – 2012-03-16 04:44:54