2011-08-12 83 views
4

我已經使用拓撲配置了經紀人網絡,如下所示。Active MQ - 經紀人網絡

  • 生產者連接到代理(B2)(P1)連接到代理(B1)和生產者(P2)
  • 代理(B1)和代理(B2)被連接作爲經紀人的網絡和被LAOD平衡
  • 消費者連接到代理(B2)(C1)連接到代理(B1)和消費者(C2)

客戶端被配置爲使用所述故障轉移爲:

  • Consumer-1 =故障轉移:tcp:// localhost:61616,tcp:// localhost:61615?randomize = false
  • Consumer-2 =故障轉移:tcp:// localhost:61615,tcp:// localhost:61616 ?randomize = false

一旦Channel-2出現故障,P2和C2就轉移到Channel-1,這是故障轉移的期望行爲。

我想了解Chaneel-2回來時的行爲嗎? 我注意到,即使在通道2恢復之後,通道1仍然繼續服務於所有連接,因此在通道之間失去負載平衡。

我想知道是否有可能一旦Channel-2回來,負載均衡將自動在通道和相應Producer-2之間自動啓動,而消費者-2則轉向Channel-2,從而實現完全負載平衡和完全故障轉移?

我曾經在 http://fusesource.com/docs/broker/5.4/clustering/index.html上遇到過一篇文章'結合容錯與負載平衡',這是推薦用於組合容錯與負載平衡嗎?

問候,

-Amber

回答

4

在這兩個你的經紀人,你需要設置你的transportConnector使updateClusterClients和rebalanceClusterClients。

<transportConnectors> 
    <transportConnector name="tcp-connector" uri="tcp://192.168.0.23:61616" updateClusterClients="true" rebalanceClusterClients="true" /> 
</<transportConnectors> 

具體來說,你應該想要rebalanceClusterClients。從http://activemq.apache.org/failover-transport-reference.html的文檔它指出:

如果屬實,連接的客戶端將被要求跨過中間商集羣 重新平衡時,新的代理加盟經紀人

的網絡,您必須使用ActiveMQ 5.4或更高版本可以使用這些選項。

+0

您好,感謝您的帖子,我還是設法配置代理上述我。 (A)P1連接到B1,C1連接到B1(B)C2連接到B2(C)B1-B2作爲Broker網絡 – AmbGup

+0

您好,感謝您發佈,我確實設法配置了上述經紀商(1)P1連接到B1,C1連接到B1(2)C2連接到B2。(3)B1-B2作爲Broker的網絡在B2的啓動時,我可以看到B1/B2之間開始平衡。一旦B2停機,所有的連接都會轉移到B1,我想要取消rstand如果如果B2返回並且C2將消耗來自B2的消息,則平衡仍然有效。如何證明當B2回來時是否發生了夾擊。如文章中所討論的,是否有一種記錄Broker URI的方法? http://activemq.apache.org/mdc-logging.html – AmbGup

+0

您可以從JMX進行監控或查看您的經紀商的建議消息。 – whaley

0

作爲您的後續問題的答案: 「是否有一種方法記錄經紀人的URI如文章中所討論的?「

爲了展示一下客戶端連接到什麼經紀人, 修改客戶端的Log4j配置如下:

<log4j:configuration debug="true" 
        xmlns:log4j="http://jakarta.apache.org/log4j/"> 

    ... 

    <logger name="org.apache.activemq.transport.failover.FailoverTransport"> 
     <level value="debug"/> 
    </logger> 

    ... 

</log4j:configuration>