更新時間:2021-07-28 16:37:13 來源:動力節點 瀏覽1221次
實現高可用,以排除單點故障引起的服務中斷。
實現負載均衡,以提升效率為更多的客戶提供服務。
ActiveMQ集群的部署方式主要有下面2種:
Broker Clusters模式:實現負載均衡,多個broker之間同步消息,已達到服務器負載的可能。
Master Slave模式:實現高可用,當主服務器宕機時,備用服務器可以立即補充,以保證服務的繼續。
失效轉移連接
該策略用于控制消費者的訪問,這是我們在編寫代碼的時候要使用的連接方式。一個消費者連接到多個broker集群的中的一個broker,當該broker出問題時,消費者自動連接到其他一個正常的broker。消費者使用failover協議來連接broker,通常叫做失效轉移(也叫故障轉移,斷線重連機制,FailOver)策略,語法如下:
failover:(uri1,uri2,...,uriN)?transportOptions
uri:消息服務器的地址
transportOptions參數說明:
randomize:默認為 true ,表示在URI列表中選擇URL連接時是否采用隨機策略。
initialReconnectDelay:默認為10,單位為毫秒,表示一次嘗試重連之間等待的時間。
maxReconnectDelay:默認 30000,單位毫秒,最長重連的時間間隔。
例如:
<!--
1. client使用failover協議來與有效的master交互
2. master地址在前,slavew 在后,randomize 為 false讓 Client優先與master通信
3. 如果 master 失效,failover協議將會嘗試與slave建立鏈接,并依此重試
-->
failover:(tcp://localhost:61616,tcp://localhost:61617)?randomize=false
下面考慮一下master slave + broker cluster環境下客戶端的失效轉移鏈接。
舉例,客戶端:
<property name="brokerURL" value="failover:(tcp://uri1:port,
tcp://uri2:port,
tcp://uri3:port,
tcp://uri4:port,
tcp://uri5:port,
tcp://uri6:port)?startupMaxReconnectAttempts=2" />
uri1~uri3構成一個高可用集群,其中只有一個broker是master ,另外的兩個broker是slave,slave不接受客戶端的請求,只是對master的數據進行同步(個人覺得不接受客戶端的請求太過分了,最起碼可以將請求轉發給maser也行啊),客戶端若沒有采用失效轉移機制而直接去鏈接集群中的某一個broker;如下:
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.8.201:61616");
此時很有可能你鏈接到的是slave,而不是master,而salve是完全不接受客戶端的請求,更不會好心腸的給你轉發給master,所以必然的結果就是鏈接超時。如果運氣好直接鏈接的就是master,那是沒有問題的,客戶端可以得到響應。
采用failover,會在提供的uri列表中不斷嘗試鏈接,在同一次嘗試過程中對于無效的聯機,只會訪問一次。
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("failover:(tcp://192.168.8.201:61616,tcp://192.168.8.202:61616,tcp://192.168.8.203:61616)?startupMaxReconnectAttempts=2");
基于此,uri1~uri3構成一個高可用集群,uri4~uri6構成另外一個高可用集群,組內高可用,組件負載均衡。無論是producer還是consumer一定會在failover的指導下,鏈接到某一組的master上,若鏈接到同一組的master,消息的產生和消費就是順利成章。若producer和consumer了解到不同組的master,則consumer所鏈接的master會通過network of broker機制去producer所在集群中請求消息,然后返回給consumer。
以上就是動力節點小編介紹的"ActiveMQ集群的簡單介紹",希望對大家有幫助,想了解更多可查看ActiveMQ教程。動力節點在線學習教程,針對沒有任何Java基礎的讀者學習,讓你從入門到精通,主要介紹了一些Java基礎的核心知識,讓同學們更好更方便的學習和了解Java編程,感興趣的同學可以關注一下。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習