activeMQ消息中間件_第1頁(yè)
activeMQ消息中間件_第2頁(yè)
activeMQ消息中間件_第3頁(yè)
activeMQ消息中間件_第4頁(yè)
activeMQ消息中間件_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 消息中間件分布式說(shuō)明書(shū) 第 一 章 中間件選型1.1 KafkaKafka是linkedin開(kāi)源的MQ系統(tǒng),主要特點(diǎn)是基于Pull的模式來(lái)處理消息消費(fèi),追求高吞吐量,一開(kāi)始的目的就是用于日志收集和傳輸,0.8開(kāi)始支持復(fù)制,不支持事務(wù),適合產(chǎn)生大量數(shù)據(jù)的互聯(lián)網(wǎng)服務(wù)的數(shù)據(jù)收集業(yè)務(wù)。1.2 RabbitMQRabbitMQ是使用Erlang編寫(xiě)的一個(gè)開(kāi)源的消息隊(duì)列,本身支持很多的協(xié)議:AMQP,XMPP, SMTP, STOMP,也正因如此,它非常重量級(jí),更適合于企業(yè)級(jí)的開(kāi)發(fā)。結(jié)合erlang語(yǔ)言本身的并發(fā)優(yōu)勢(shì),性能較好,但是不利于做二次開(kāi)發(fā)和維護(hù)。1.3 RocketMQ 阿里巴巴的MQ中間件,

2、在其多個(gè)產(chǎn)品下使用,并能夠撐住雙十一的大流量,他并沒(méi)有實(shí)現(xiàn)JMS規(guī)范,使用起來(lái)很簡(jiǎn)單。部署由一個(gè) 命名服務(wù)(nameserver)和一個(gè)代理(broker)組成,nameserver和broker以及producer都支持集群,隊(duì)列的容量受機(jī)器硬盤(pán)的限制,隊(duì)列滿(mǎn)后可以支持持久化到硬盤(pán)(也可以自己適配代碼,將其持久化到NOSQL數(shù)據(jù)庫(kù)中),隊(duì)列滿(mǎn)后會(huì)影響吞吐量,可以采用主備來(lái)保證穩(wěn)定性,支持回溯消費(fèi),可以在broker端進(jìn)行消息過(guò)濾.1.4 ActiveMQActiveMQ是Apache下的一個(gè)子項(xiàng)目。歷史悠久的開(kāi)源項(xiàng)目,已經(jīng)在很多產(chǎn)品中得到應(yīng)用,實(shí)現(xiàn)了JMS1.1規(guī)范,可以和spring-jm

3、s輕松融合,實(shí)現(xiàn)了多種協(xié)議,如Ajax,REST,Stomp等,支持持久化到數(shù)據(jù)庫(kù),少量代碼就可以高效地實(shí)現(xiàn)高級(jí)應(yīng)用場(chǎng)景, 可以很好的運(yùn)行在任何JVM上,而不只是集成到JBoss的應(yīng)用服務(wù)器中,對(duì)spring有很好的支持,支持大量的跨語(yǔ)言客戶(hù)端。1.5 ZeroMQZeroMQ號(hào)稱(chēng)最快的消息隊(duì)列系統(tǒng),尤其針對(duì)大吞吐量的需求場(chǎng)景。ZMQ能夠?qū)崿F(xiàn)RabbitMQ不擅長(zhǎng)的高級(jí)/復(fù)雜的隊(duì)列,但是開(kāi)發(fā)人員需要自己組合多種技術(shù)框架,技術(shù)上的復(fù)雜度是對(duì)這MQ能夠應(yīng)用成功的挑戰(zhàn)。擴(kuò)展性好,開(kāi)發(fā)比較靈活,采用C語(yǔ)言實(shí)現(xiàn),實(shí)際上他只是一個(gè)socket庫(kù)的重新封裝,如果我們做為消息隊(duì)列使用,需要開(kāi)發(fā)大量的代碼。Ac

4、tiveMQ消息中間件的選擇從以下方面進(jìn)行考慮:(1)activemq可以很好的運(yùn)行在任何JVM上,而不只是集成到JBoss的應(yīng)用服務(wù)器中;(2)activemq支持大量的跨語(yǔ)言客戶(hù)端;(3)activemq支持許多不同的協(xié)議,如Ajax,REST,Stomp,OpenWire,XMPP(4)activemq支持許多高級(jí)功能,例如MessageGroups,ExclusiveConsumer,CompositeDestinations(5)activemq支持可靠連接并且具有可配置的自動(dòng)重連接(6)activemq對(duì)spring有很好的支持(7)activemq支持跨網(wǎng)絡(luò)的分布式目的地(8)a

5、ctivemq是速度非???;一般要比jbossmq快10倍(9)群集(Cluster):為了簡(jiǎn)化點(diǎn)對(duì)點(diǎn)通訊模式中的系統(tǒng)配置,MQ提供Cluster(群集)的解決方案。群集類(lèi)似于一個(gè)域(Domain),群集內(nèi)部的隊(duì)列管理器之間通訊時(shí),不需要兩兩之間建立消息通道,而是采用群集(Cluster)通道與其它成員通訊,從而大大簡(jiǎn)化了系統(tǒng)配置。此外,群集中的隊(duì)列管理器之間能夠自動(dòng)進(jìn)行負(fù)載均衡,當(dāng)某一隊(duì)列管理器出現(xiàn)故障時(shí),其它隊(duì)列管理器可以接管它的工作,從而大大提高系統(tǒng)的高可靠性。 一、activeMQ主要的幾類(lèi)部署方式比較1、默認(rèn)的單機(jī)部署(kahadb)activeMQ的默認(rèn)存儲(chǔ)的單機(jī)方式,以本地kah

6、adb文件的方式存儲(chǔ),所以性能指標(biāo)完全依賴(lài)本地磁盤(pán)IO,不能提供高可用。 2、基于zookeeper的主從(levelDB Master/Slave)5.9.0新推出的主從實(shí)現(xiàn),基于zookeeper來(lái)選舉出一個(gè)master,其他節(jié)點(diǎn)自動(dòng)作為slave實(shí)時(shí)同步消息。因?yàn)橛袑?shí)時(shí)同步數(shù)據(jù)的slave的存在,master不用擔(dān)心數(shù)據(jù)丟失,所以leveldb會(huì)優(yōu)先采用內(nèi)存存儲(chǔ)消息,異步同步到磁盤(pán)。所以該方式的activeMQ讀寫(xiě)性能都最好,特別是寫(xiě)性能能夠媲美非持久化消息。優(yōu)點(diǎn):實(shí)現(xiàn)高可用和數(shù)據(jù)安全性能較好缺點(diǎn):因?yàn)檫x舉機(jī)制要超過(guò)半數(shù),所以最少需要3臺(tái)節(jié)點(diǎn),才能實(shí)現(xiàn)高可用。 3、基于共享數(shù)據(jù)庫(kù)的主從(

7、Shared JDBC Master/Slave)可以基于postgres、mysql、oracle等常用數(shù)據(jù)庫(kù)。每個(gè)節(jié)點(diǎn)啟動(dòng)都會(huì)爭(zhēng)搶數(shù)據(jù)庫(kù)鎖,從而保證master的唯一性,其他節(jié)點(diǎn)作為備份,一直等待數(shù)據(jù)庫(kù)鎖的釋放。因?yàn)樗邢⒆x寫(xiě),其實(shí)都是數(shù)據(jù)庫(kù)操作,activeMQ節(jié)點(diǎn)本身壓力很小,性能完全取決于數(shù)據(jù)庫(kù)性能。優(yōu)點(diǎn):實(shí)現(xiàn)高可用和數(shù)據(jù)安全簡(jiǎn)單靈活,2臺(tái)節(jié)點(diǎn)就可以實(shí)現(xiàn)高可用缺點(diǎn):穩(wěn)定性依賴(lài)數(shù)據(jù)庫(kù)性能依賴(lài)數(shù)據(jù)庫(kù) 第 二 章 實(shí)現(xiàn)MQ分布式2.1.1 Master/Slave集群搭建-傳統(tǒng)式 Kahadb是activemq從版本5.4之后的默認(rèn)消息存儲(chǔ)引擎一般activemq的Master Slav

8、e是基于KAHADB的阻塞來(lái)做的,先看一下原理· 把master conf 目錄中的jetty.xml中的端口改成8161· 把slave conf 目錄中的jetty.xml中的端口改成8162此時(shí)把master和slave先后啟動(dòng),其實(shí)你也可以不用管順序,誰(shuí)先啟動(dòng)誰(shuí)會(huì)先把<kahaDB directory=“/localhost/kahadb”/>中的db lock住,它就成了mater,而此時(shí)另一個(gè)實(shí)例會(huì)處于“pending”狀態(tài)。當(dāng)master宕機(jī)后slave會(huì)自動(dòng)啟動(dòng)轉(zhuǎn)變?yōu)閙aster。當(dāng)宕掉的master再次被啟動(dòng)后然后變成slave掛載在原先的sl

9、ave下面變成slave2.1.2 Master/Slave集群搭建-基于ZooKeeperReplicated LevelDB Store方式 這種主備方式是ActiveMQ5.9以后才新增的特性,使用ZooKeeper協(xié)調(diào)選擇一個(gè)node作為master。被選擇的master broker node開(kāi)啟并接受客戶(hù)端連接。其他node轉(zhuǎn)入slave模式,連接master并同步他們的存儲(chǔ)狀態(tài)。slave不接受客戶(hù)端連接。所有的存儲(chǔ)操作都將被復(fù)制到連接至Master的slaves。如果master死了,得到了最新更新的slave被允許成為master。failed node能夠重新加入到網(wǎng)絡(luò)中并

10、連接master進(jìn)入slave mode。所有需要同步的disk的消息操作都將等待存儲(chǔ)狀態(tài)被復(fù)制到其他法定節(jié)點(diǎn)的操作完成才能完成。所以,如果你配置了replicas=3,那么法定大小是(3/2)+1=2. Master將會(huì)存儲(chǔ)并更新然后等待 (2-1)=1個(gè)slave存儲(chǔ)和更新完成,才匯報(bào)success。至于為什么是2-1,熟悉Zookeeper的應(yīng)該知道,有一個(gè)node要作為觀察者存在。單一個(gè)新的master被選中,你需要至少保障一個(gè)法定node在線(xiàn)以能夠找到擁有最新?tīng)顟B(tài)的node。這個(gè)node將會(huì)成為新的master。因此,推薦運(yùn)行至少3個(gè)replica nodes,以防止一個(gè)node失敗

11、了,服務(wù)中斷。 從ActiveMQ5.10開(kāi)始出現(xiàn)了使用ZooKeeper來(lái)進(jìn)行Master/Slave搭建的模式。 搭建時(shí)請(qǐng)務(wù)必注意下面幾個(gè)問(wèn)題:1 參于master slave組網(wǎng)的配置中<broker xmlns=“/schema/core” brokerName=“zk_cluster_nodes“必須一至。2 ActiveMQ至少需要3個(gè)實(shí)例(2N+1公式),只要不符合2N+1,master slave集群會(huì)發(fā)生集群崩潰。 搭建ZooKeeper,你可以搭建3個(gè)ZooKeeper實(shí)例也可以只用1個(gè),如果出于高可用性考慮建議使用3

12、臺(tái)ZooKeeper。 下載ZK,我們?cè)谶@邊使用的是“zookeeper-3.4.6”,把它解壓到服務(wù)器上,在其conf目錄下生成zoo1.cfg文件 ,內(nèi)容如下: 在ZK的data目錄下建立一個(gè)目錄,名為“1”,并在其下建立一個(gè)文件,文件名為“myid”并使其內(nèi)容為1 以server.A=B:C:D的形式指定三臺(tái)服務(wù)器 A - 數(shù)字,表示服務(wù)器的編號(hào) B - 服務(wù)器的ip C - 服務(wù)器與集群中的Leader服務(wù)器交換信息的端口 D - 用來(lái)執(zhí)行選舉時(shí)服務(wù)器相互通信的端口(萬(wàn)一集群中的 Leader 服務(wù)器掛了,需要一個(gè)端口來(lái)重新進(jìn)行選舉,選出一個(gè)新的 Leade 如果你需要在本地搭建2N+

13、1的ZooKeeper,那你必須依次在data目錄下建立2、3兩個(gè)文件夾并且在每個(gè)文件夾下都有一個(gè)myid的文件,文件的內(nèi)容依次也為2,3,然后把下面注釋掉的3行server.1 server.2 server.3前的#注釋符放開(kāi)。因此data目錄下的目錄名和myid中的內(nèi)容對(duì)應(yīng)的就是server.x這個(gè)名字。ü 核心配置以下是傳統(tǒng)的Master/Slave配置ü 基于ZK的配置(添加基于replicatedLevelDB的持久化配置)2.1.3 Master/Slave集群搭建-Broker Cluster搭建所謂cluster即負(fù)載勻衡,它負(fù)載的是“用戶(hù)”的請(qǐng)求,此處的

14、用戶(hù)就是調(diào)用端cluster的用法就是用來(lái)分散用戶(hù)的“并發(fā)”請(qǐng)求的。前面説過(guò),ActiveMQ的Cluster有兩種:1 動(dòng)態(tài)式(multicast)2 靜態(tài)式(static)在實(shí)際應(yīng)用場(chǎng)景中”靜態(tài)方式“被大量使用,動(dòng)態(tài)式使用的是multicast即組播式,基本已被淘汰。ü 核心配置ü 在61616中的配置ü 在61617中的配置ü 客戶(hù)端的配置2.1.4 Master/Slave集群搭建-Broker Cluster和Master Slave對(duì)比優(yōu)點(diǎn)· 自動(dòng)分發(fā)調(diào)用端請(qǐng)求· 流量分散缺點(diǎn)當(dāng)調(diào)用端連接上任意一個(gè)節(jié)點(diǎn)發(fā)送了一條消息,比如

15、說(shuō)往NODE A發(fā)送了一條消息。此時(shí)消費(fèi)端還沒(méi)來(lái)得及消費(fèi)NODE A上的消息該節(jié)點(diǎn)就發(fā)生宕機(jī)了。此時(shí)調(diào)用端因?yàn)橛衒ailover所以它會(huì)自動(dòng)連上另一個(gè)節(jié)點(diǎn)(NODE B)而該節(jié)點(diǎn)上是不存在剛才“發(fā)送的消息”的,因?yàn)閯偛虐l(fā)送到NODE A的消息只在NODE A上,沒(méi)有同步到NODE B上。因?yàn)橹挥蠱aster Slave會(huì)做主從間的消息同步,這是一個(gè)致命傷。2.1.5 MASTER SLAVE+BROKER CLUSTER的搭建 考慮到消費(fèi)端可能會(huì)發(fā)生:當(dāng)Group1中有未消費(fèi)的數(shù)據(jù)時(shí)時(shí),消費(fèi)端此時(shí)被轉(zhuǎn)派到了Group2中的任意一個(gè)節(jié)點(diǎn)。l master/slave模式下,消息會(huì)被逐個(gè)復(fù)制l 而

16、cluster模式下,請(qǐng)求會(huì)被自動(dòng)派發(fā)l 我們使用ZK搭建MASTER SLAVEl 我們使用BROKER CLUSTER把兩個(gè)“組”合并在一起先來(lái)看下面的集群規(guī)劃Ø Group1的配置由于這涉及到兩個(gè)組6個(gè)ActiveMQ的實(shí)例配置,如果把6個(gè)配置全寫(xiě)出來(lái)是完全沒(méi)有必要的,因此我就把配置分成兩組來(lái)寫(xiě)吧。每個(gè)組的配置對(duì)于其組內(nèi)各個(gè)節(jié)點(diǎn)都為一致的,除去那些個(gè)端口號(hào)。Group1的配置(保持6個(gè)實(shí)例中brokerName全部為一致)可以看到這邊的broker cluster的配置是用來(lái)確保每一臺(tái)都可以和Group2中的各個(gè)節(jié)點(diǎn)保持同步Ø Group2的配置 可以看到這邊的bro

17、ker cluster的配置是用來(lái)確保每一臺(tái)都可以和Group1中的各個(gè)節(jié)點(diǎn)保持同步2.1.6 MASTER SLAVE+BROKER CLUSTER的搭建-客戶(hù)端2.1.7 MASTER SLAVE+BROKER CLUSTER的搭建-實(shí)驗(yàn)1、先把所有實(shí)例進(jìn)程全部殺掉2、把6臺(tái)實(shí)例全部啟動(dòng)起來(lái)3、把客戶(hù)端寫(xiě)上全部6臺(tái)實(shí)例4、使用生產(chǎn)端任意發(fā)送30條消息5、生產(chǎn)端連上了61616與61619(ctivemqa1、activemqa2),發(fā)送了30條消息,61616和61619收到信息,消費(fèi)端消息進(jìn)行消費(fèi)6、然后我們把61616、61619所屬的activemqa1、activemqa2的進(jìn)程直

18、接殺了7、然后運(yùn)行消費(fèi)端,消費(fèi)端連上了61617、61619,activemqb1、activemqb2成為master,控臺(tái)顯示無(wú)任何消息消費(fèi)8、再重啟activemqa1、activemqa2,殺掉activemqb1、activemqb2,此時(shí)activemqc1、activemqc2成為master,控臺(tái)顯示無(wú)任何消息消費(fèi)9、ok第 三 章 實(shí)現(xiàn)MQ持久化3.1 MQ持久化配置修改3.1.1 持久化為數(shù)據(jù)庫(kù) 在activemq的conf目錄下的activemq.xml,找到 <persistenceAdapter> <kahaDB directory="$a

19、ctivemq.base/data/kahadb"/> </persistenceAdapter> 把它注釋掉換成: <persistenceAdapter> <jdbcPersistenceAdapter dataSource="#oracle-ds"/> </persistenceAdapter> 此處是以持久化到oracle為例,因此需要引用把oracle的驅(qū)動(dòng)jar包,并在在activemq.xml的 <bean></beans>里面增加數(shù)據(jù)庫(kù)的配置,如下: 運(yùn)行activemq,可以發(fā)現(xiàn)自動(dòng)創(chuàng)建了三張表: 1、activemq_acks用于存儲(chǔ)訂閱關(guān)系。如果是持久化Topic,訂閱者和服務(wù)器的訂閱關(guān)系在這個(gè)表保存。 2、activemq_lock此表用于主從模式鎖定,當(dāng)?shù)谝粋€(gè)activemq服務(wù)器啟動(dòng)后會(huì)鎖住此表成為master,第二

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論