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