天天看點

ActiveMQ 叢集

Queue consumer clusters

ActiveMQ支援Consumer對消息高可靠性的負載平衡消費,如果一個Consumer死掉,該消息會轉發到其它的Consumer消費的Queue上。如果一個Consumer獲得消息比其它Consumer快,那麼他将獲得更多的消息。是以推薦ActiveMQ的Broker和Client使用failover://transport的方式來配置連結。

Broker clusters

大部情況下是使用一系列的Broker和Client連結到一起。如果一個Broker死掉了,Client可以自動連結到其它Broker上。實作以上行為需要用failover協定作為Client。

如果啟動了多個Broker,Client可以使用static discover或者 Dynamic discovery容易的從一個broker到另一個broker直接連結。

這樣當一個broker上沒有Consumer的話,那麼它的消息不會被消費的,然而該broker會通過存儲和轉發的政策來把該消息發到其它broker上。

特别注意:ActiveMQ預設的兩個broker,static連結後是單方向的,broker-A可以通路消費broker-B的消息,如果要支援雙向通信,需要在netWorkConnector配置的時候,設定duplex=true 就可以了。

Master Slave

在5.9的版本裡面,廢除了Pure Master Slave的方式,目前支援:

1:Shared File System Master Slave:基于共享儲存的Master-Slave:多個broker執行個體使用一個存儲檔案,誰拿到檔案鎖就是master,其他處于待啟動狀态,如果master挂掉了,某個搶到檔案鎖的slave變成master

2:JDBC Master Slave:基于JDBC的Master-Slave:使用同一個資料庫,拿到LOCK表的寫鎖的broker成為master

3:Replicated LevelDB Store:基于ZooKeeper複制LevelDB存儲的Master-Slave機制,這個是5.9新加的

具體的可以到官方察看: http://activemq.apache.org/masterslave.html

JDBC Master Slave的方式

利用資料庫作為資料源,采用Master/Slave模式,其中在啟動的時候Master首先獲得獨有鎖,其它Slaves Broker則等待擷取獨有鎖。

推薦用戶端使用Failover來連結Brokers。

具體如下圖所示:

ActiveMQ 叢集
Master失敗

如果Master失敗,則它釋放獨有鎖,其他Slaver則擷取獨有鎖,其它Slaver立即獲得獨有鎖後此時它将變成Master,并且啟動所有的傳輸連結。同時,Client将停止連結之前的Master和将會輪詢連結到其他可以利用的Broker即新Master。如上中圖所示

Master重新開機

任何時候去啟動新的Broker,即作為新的Slave來加入叢集,如上右圖所示

JDBC Master Slave的配置

使用<jdbcPersistenceAdapter/>來配置消息的持久化,自動就會使用JDBC MasterSlave的方式。

jdbc的方式就是所有的broker連結到系統的資料庫,消息存儲在資料庫中,隻要是處于叢集中的Consumer都可以接受到相同目的地的消息。(jdbc 的主從不是,就不需要建立靜态網絡清單,以及回流就可實作消息在不同的broker上進行接受)