1. 程式人生 > >ActiveMQ叢集(一)

ActiveMQ叢集(一)

ActiveMQ叢集

        ActiveMQ具有強大和靈活的叢集功能,但在使用的過程中會發現很多的缺點,ActiveMQ的叢集方式主要由兩種:Master-SlaveBroker Cluster

1、Master-Slave

        Master-Slave方式中,只能是Master提供服務,Slave是實時地備份Master的資料,以保證訊息的可靠性。當Master失效時,Slave會自動升級為Master,客戶端會自動連線到Slave上工作。Master-Slave模式分為三類:Pure Master SlaveShared File System Master Slave

JDBC Master Slave

(1)PureMaster Slave

    需要兩個Broker,一個作為Master,另一個作為Slave,執行時,Slave通過網路實時從Master處複製資料,同時,如果SlaveMaster失去連線,Slave就會自動升級為Master,繼續為客戶端提供訊息服務,如圖所示:

    實踐時,我們使用兩個ActiveMQ伺服器,一個作為MasterMaster不需要做特殊的配置;另一個作為Slave,配置${ACTIVEMQ_HOME}/conf/activemq.xml檔案,在<broker>節點中新增連線到MasterURI

和設定Master失效後不關閉Slave,如下:

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="pure_slave" 
masterConnectorURI="tcp://0.0.0.0:61616" shutdownOnMasterFailure="false" dataDirectory="${activemq.base}">

同時修改Slave的服務埠,如:

<transportConnectors>
            <transportConnector name="openwire" uri="tcp://0.0.0.0:61617"/>
</transportConnectors>

為了看到實踐的效果,Master和Slave的訊息持久化介質都是採用MySQL,並且Master和Slave分別連線不同的資料庫。

    在訊息生產者應用和訊息消費者應用的Spring配置檔案中新增以下紅色內容:

<property name="brokerURL" value="failover:(tcp://localhost:61616,tcp://localhost:61617)?initialReconnectDelay=100" />

配置完成後,我們可以通過以下步驟來進行測試:

A、啟動MasterSlave,啟動訊息生產者應用,並分別傳送一些Queue訊息和Topic訊息,如果此時訂閱Topic訊息的消費者設定了clientID,我們就可以在Master的資料庫和Slave的資料庫中看到尚未消費的訊息,包括QueueTopic的訊息;

B、啟動消費者應用,可以接收到訊息;

C、關閉消費者,生產者繼續傳送一些訊息A

D、停止Master

E、生產者繼續傳送訊息B

F、啟動消費者應用,消費者可以接收到訊息A和訊息B,說明Slave接替了Master的工作並複製了Master的訊息。

    這種方式只能兩臺機器做叢集,可以起到很好的雙機熱備功能,但只能失效一次,只能停機恢復Master-Slave結構。

(2)SharedFile System Master Slave

        SharedFile System Master Slave就是利用共享檔案系統做ActiveMQ叢集,是基於ActiveMQ的預設資料庫kahaDB完成的,kahaDB的底層是檔案系統。這種方式的叢集,Slave的個數沒有限制,哪個ActiveMQ例項先獲取共享檔案的鎖,那個例項就是Master,其它的ActiveMQ例項就是Slave,噹噹前的Master失效,其它的Slave就會去競爭共享檔案鎖,誰競爭到了誰就是Master。這種模式的好處就是當Master失效時不用手動去配置,只要有足夠多的SlaveShared File System Master Slave模式如圖所示:

    本例子是在一臺機器上執行三個ActiveMQ例項,需要對ActiveMQ的配置檔案做一些簡單的配置,就是把持久化介面卡的儲存目錄改為本地磁碟的一個固定目錄,

三個例項共享這個目錄,如下: