經(jīng)典JMS中間件ActiveMQ介紹_第1頁
經(jīng)典JMS中間件ActiveMQ介紹_第2頁
經(jīng)典JMS中間件ActiveMQ介紹_第3頁
經(jīng)典JMS中間件ActiveMQ介紹_第4頁
經(jīng)典JMS中間件ActiveMQ介紹_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

JMS&ActiveMQ介紹ByPochmuchkaJMS介紹 JavaMessageService〔JMS〕是SUN提出的旨在統(tǒng)一各種MOM〔Message-OrientedMiddleware〕系統(tǒng)接口的標(biāo)準(zhǔn),它包含點對點〔PointtoPoint,PTP〕和發(fā)布/訂閱〔Publish/Subscribe,pub/sub〕兩種消息模型,提供可靠消息傳輸、事務(wù)和消息過濾等機(jī)制。 簡單的說,JMS制定了一個發(fā)消息的標(biāo)準(zhǔn)。是一個與具體平臺無關(guān)的API,絕大多數(shù)MOM提供商都對JMS提供支持。ActiveMQ是Apache出品的開源工程,它是JMS標(biāo)準(zhǔn)的一個實現(xiàn),JMS的作用 在不同應(yīng)用之間進(jìn)行通信或者從一個系統(tǒng)傳輸數(shù)據(jù)到另外一個系統(tǒng)。兩個應(yīng)用程序之間,或分布式系統(tǒng)中發(fā)送消息,進(jìn)行異步通信。 這類問題有很多解決方案,比方DB、SOA、Socket通信、RMI,等,但我們需要根據(jù)工程的限制以及功能和性能的需要作出選擇。JMS的應(yīng)用場景:規(guī)模和復(fù)雜度較高的分布式系統(tǒng)?!?〕同步通信:客戶發(fā)出調(diào)用后,必須等待效勞對象完成處理并返回結(jié)果后才能繼續(xù)執(zhí)行;〔2〕客戶和效勞對象的生命周期緊密耦合:客戶進(jìn)程和效勞對象進(jìn)程都必須正常運(yùn)行;如果由于效勞對象崩潰或者網(wǎng)絡(luò)故障導(dǎo)致客戶的請求不可達(dá),客戶會接收到異常;〔3〕點對點通信:客戶的一次調(diào)用只發(fā)送給某個單獨(dú)的目標(biāo)對象。MOM在系統(tǒng)中的位置JMS模型Java消息效勞應(yīng)用程序結(jié)構(gòu)支持兩種模型:1.點對點模型(基于隊列)每個消息只能有一個消費(fèi)者。消息的生產(chǎn)者和消費(fèi)者之間沒有時間上的相關(guān)性.可以由多個發(fā)送者,但只能被一個消費(fèi)者消費(fèi)。一個消息只能被一個接受者接受一次生產(chǎn)者把消息發(fā)送到隊列中(Queue),這個隊列可以理解為電視機(jī)頻道(channel)在這個消息中間件上有多個這樣的channel接受者無需訂閱,當(dāng)接受者未接受到消息時就會處于阻塞狀態(tài)2.發(fā)布者/訂閱者模型〔基于主題的〕每個消息可以有多個消費(fèi)者。生產(chǎn)者和消費(fèi)者之間有時間上的相關(guān)性。訂閱一個主題的消費(fèi)者只能消費(fèi)自它訂閱之后發(fā)布的消息.允許多個接受者,類似于播送的方式生產(chǎn)者將消息發(fā)送到主題上(Topic)接受者必須先訂閱注:持久化訂閱者:特殊的消費(fèi)者,告訴主題,我一直訂閱著,即使網(wǎng)絡(luò)斷開,消息效勞器也記住所有持久化訂閱者,如果有新消息,也會知道必定有人回來消費(fèi)。JMS消息發(fā)送模式Topic發(fā)送模式JMS公共接口JMS公共點對點域發(fā)布/訂閱域ConnectionFactoryQueueConnectionFactoryTopicConnectionFactoryConnectionQueueConnectionTopicConnectionDestinationQueueTopicSessionQueueSessionTopicSessionMessageProducerQueueSenderTopicPublisherMessageConsumerQueueReceiverTopicSubscriberJMS的根本構(gòu)件連接工廠: 連接工廠是客戶用來創(chuàng)立連接的對象,例如ActiveMQ提供的ActiveMQConnectionFactory。連接:JMSConnection封裝了JMS客戶端到JMSProvider的連接與JMS提供者之間的一個虛擬的連接。會話:JMSSession是生產(chǎn)和消費(fèi)消息的一個單線程上下文。會話用于創(chuàng)立消息的生產(chǎn)者〔producer〕,消費(fèi)者〔consumer〕,消息〔message〕等,會話,是一個事務(wù)性的上下文。消息的生產(chǎn)和消費(fèi)不能包含在同一個事務(wù)中。JMS的根本構(gòu)件生產(chǎn)者:MessageProducer由Session對象創(chuàng)立的用來發(fā)送消息的對象消費(fèi)者:MessageConsumer由Session對象創(chuàng)立的用來發(fā)送消息的對象消息:Messagejms消息包括消息頭和消息體以及其它的擴(kuò)展屬性。JMS定義的消息類型有TextMessage、MapMessage、BytesMessage、StreamMessage和ObjectMessage。目的地:Destination,消息的目的地,是用來指定生產(chǎn)的消息的目標(biāo)和它消費(fèi)的消息的來源的對象。消息隊列:Queue點對點的消息隊列消息主題:Tipic發(fā)布訂閱的消息隊列Jms消息發(fā)送時序圖Jms消息發(fā)送開發(fā)流程1、生產(chǎn)者〔producer〕開發(fā)流程〔ProducerTool.java〕: 1.1創(chuàng)立Connection: 根據(jù)url,user和password創(chuàng)立一個jmsConnection。 1.2創(chuàng)立Session: 在connection的根底上創(chuàng)立一個session,同時設(shè)置是否支持事務(wù)和ACKNOWLEDGE標(biāo)識。 1.3創(chuàng)立Destination對象: 需指定其對應(yīng)的主題〔subject〕名稱,producer和consumer將根據(jù)subject來發(fā)送/接收對應(yīng)的消息。 1.4創(chuàng)立MessageProducer: 根據(jù)Destination創(chuàng)立MessageProducer對象,同時設(shè)置其持久模式。 1.5發(fā)送消息到隊列〔Queue〕: 封裝TextMessage消息,使用MessageProducer的send方法將消息發(fā)送出去。2、消費(fèi)者〔consumer〕開發(fā)流程〔ConsumerTool.java〕: 2.1實現(xiàn)MessageListener接口: 消費(fèi)者類必須實現(xiàn)MessageListener接口,然后在onMessage()方法中監(jiān)聽消息的到達(dá)并處理。 2.2創(chuàng)立Connection: 根據(jù)url,user和password創(chuàng)立一個jmsConnection,如果是durable模式,還需要給connection設(shè)置一個clientId。 2.3創(chuàng)立Session和Destination: 2.4創(chuàng)立replyProducer【可選】: 可以用來將消息處理結(jié)果發(fā)送給producer。 2.5創(chuàng)立MessageConsumer: 根據(jù)Destination創(chuàng)立MessageConsumer對象。 2.6消費(fèi)message: 在onMessage()方法中接收producer發(fā)送過來的消息進(jìn)行處理,并可以通過replyProducer反響信息給producerJms消息訂閱者流程圖JMS消息的事務(wù)1.創(chuàng)立事務(wù)createSession(paramA,paramB);paramA是設(shè)置事務(wù)的,paramB設(shè)置acknowledgmentmode〔應(yīng)答模式〕paramA設(shè)置為false時:paramB的值可為Session.AUTO_ACKNOWLEDGE,Session.CLIENT_ACKNOWLEDGE,DUPS_OK_ACKNOWLEDGE其中一個。2.事務(wù)的應(yīng)答確認(rèn)A〕paramA設(shè)置為true時:paramB的值忽略,acknowledgmentmode被jms效勞器設(shè)置SESSION_TRANSACTED。當(dāng)一個事務(wù)被提交的時候,消息確認(rèn)就會自動發(fā)生。B〕paramA設(shè)置為false時:Session.AUTO_ACKNOWLEDGE為自動確認(rèn),當(dāng)客戶成功的從receive方法返回的時候,或者從MessageListener.onMessage方法成功返回的時候,會話自動確認(rèn)客戶收到的消息。Session.CLIENT_ACKNOWLEDGE為客戶端確認(rèn)。客戶端接收到消息后,必須調(diào)用的acknowledge方法。jms效勞器才會刪除消息?!材J(rèn)是批量確認(rèn)〕DUPS_OK_ACKNOWLEDGE允許副本確實認(rèn)模式。一旦接收方應(yīng)用程序的方法調(diào)用從處理消息處返回,會話對象就會確認(rèn)消息的接收,而且允許重復(fù)確認(rèn)。如果是重復(fù)的消息,那么JMSprovider必須把消息頭的JMSRedelivered字段設(shè)置為true。消費(fèi)者的消費(fèi)方式下兩種方法之一:同步消費(fèi)。通過調(diào)用消費(fèi)者的receive方法從目的地中顯式提取消息。receive方法可以一直阻塞到消息到達(dá)。異步消費(fèi)??蛻艨梢詾橄M(fèi)者注冊一個消息監(jiān)聽器,以定義在消息到達(dá)時所采取的動作。實現(xiàn)MessageListener接口,在MessageListener〔〕方法中實現(xiàn)消息的處理邏輯。JMS的通信機(jī)制

activeMQ支持多種通訊協(xié)議TCP/UDP等,我們選取最常用的TCP來分析activeMQ的通訊機(jī)制。首先我們來明確一個概念:

客戶(Client):消息的生產(chǎn)者、消費(fèi)者對activeMQ來說都叫作客戶。

消息中轉(zhuǎn)器(Messagebroker):它是activeMQ的核心,它接收信息并進(jìn)行相關(guān)處理后分發(fā)給消息消費(fèi)者。

為了能清楚的描述出activeMQ的核心通訊機(jī)制,我們選擇3個局部來進(jìn)行說明,它們分別是建立鏈接、關(guān)閉鏈接、心跳。

一、Client跟activeMQ的TCP通訊的初始化過程分析如下:

1.a(chǎn)ctiveMQ初始化時,通過TcpTransportServer類根據(jù)配置翻開TCP偵聽端口,客戶通過該端口發(fā)起建立鏈接的動作。

2.把a(bǔ)ccept的Socket放入阻塞隊列中。

3.另外一個線程Sockethandler阻塞著等待隊列中是否有新的Socket,如果有那么取出來。

4.生成一個TransportConnection的實例。TransportConnection類的主要作用是處理鏈路的狀態(tài)信息,并實現(xiàn)CommandVisitor接口來完成各類消息的處理。

5.TransportConnection會使用一個由多個TransportFilter實例組成的消息處理鏈條,負(fù)責(zé)對接收到的各類消息進(jìn)行處理并發(fā)送相應(yīng)的應(yīng)答。這個鏈條的典型組成順序:MutexTransport->WireFormatNegotiator->InactivityMonitor->TcpTransport。在這條鏈條中最后的一環(huán)就是TcpTransport類,它是實際和Client獲取和發(fā)送數(shù)據(jù)的地方,該類的重要

6.建鏈完成,可以進(jìn)行通訊操作。方法有run()和oneway(),一個負(fù)責(zé)讀取,一個負(fù)責(zé)發(fā)送。

二、關(guān)閉鏈接

activeMQ發(fā)現(xiàn)TCP鏈接的關(guān)閉,最關(guān)鍵的代碼在TcpBufferedInputStream類中的

intn=in.read(buffer,position,buffer.length-position);

三、心跳

為了更好的維護(hù)TCP鏈路的使用,activeMQ采用了心跳機(jī)制作為判斷雙方鏈路的健康情況。activeMQ使用的是雙向心跳,也就是activeMQ的Broker和Client雙方都進(jìn)行相互心跳,但不管是Broker或Client心跳的具體處理情況是完全一樣的,都在InactivityMonitor類中實現(xiàn),下面具體介紹。

心跳會產(chǎn)生兩個線程“InactivityMonitorReadCheck”和“InactivityMonitorWriteCheck”,它們都是Timer類型,都會隔一段固定時間被調(diào)用一次。ReadCheck線程主要調(diào)用的方法是readCheck(),當(dāng)在等待時間內(nèi),有消息接收到,那么該方法會返回true。WriteCheck線程主要調(diào)用的方法是writeCheck(),這有個小技巧,大家可以參考一下,那就是當(dāng)WriteCheck線程休眠時,有任何數(shù)據(jù)發(fā)送成功,那么該線程被喚醒后,不用通過TCP向?qū)Ψ秸娴陌l(fā)送心跳消息,這樣可以從一定程度上減少網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量。ActiveMQ模型分析首先介紹該模型中每個領(lǐng)域類的作用,然后再介紹它們之間的關(guān)系。Broker:activeMQ的一個整體代表RegionBroker:負(fù)責(zé)分發(fā)broker的操作到相應(yīng)的消息區(qū)域Region:activeMQ目前有四種主要消息區(qū)域:隊列域(queueRegion)、主題域(topicRegion)、臨時隊列域(tempQueueRegion)、臨時主題域(tempTopicRegion)TransportConnection:代表一個通訊連接Destination:消息的目的地,主要包括兩種Queue、Topic兩種Subscription:消息的消費(fèi)者、訂閱者M(jìn)essageStore:消息持久化存儲,象比較復(fù)雜的Kaha存儲機(jī)制就放在這PendingMessageCursor:等待發(fā)給消費(fèi)者的消息分發(fā)指針ConnectionContext:用來維護(hù)發(fā)送請求所需的連接上下文ActiveMQ模型分析---靜態(tài)模型ActiveMQ模型分析下面我們把這些領(lǐng)域類的關(guān)系進(jìn)行一個描述:1、一個RegionBroker擁有4種消息域的對象。2、RegionBroker擁有所有目的地對象(destination)。3、每個消息域(Region)也擁有它們對應(yīng)的0或N個目的地對象(destination)。4、同時每個Region也擁有它們對應(yīng)的0或N個消息消費(fèi)者、訂閱者(subscription)。5、每個目的地都有一個相應(yīng)的持久化存儲方式(messageStore),以及一個等待發(fā)送的消息分發(fā)指針(pendingMessageCursor)。6、消息消費(fèi)者和目的地可以彼此擁有0或N個。7、每個消費(fèi)者都有一個對應(yīng)的ConnectionContext,ConnectionContext里包括一個TransportConnection對象,通過TransportConnection把真實的消息發(fā)給消費(fèi)者。8、TransportConnection也可以做為通訊連接,偵聽消息生產(chǎn)者發(fā)出的信息,所以每個TransportConnection會指向Broker對象。ActiveMQ模型分析-----動態(tài)模型ActiveMQ模型分析消費(fèi)生產(chǎn)者進(jìn)程向activeMQ所在進(jìn)程發(fā)送消息和消費(fèi)者消費(fèi)消息的過程如上圖所示,消息傳遞的路徑經(jīng)過了核心領(lǐng)域模型,具體步驟如下:步驟1:生產(chǎn)者通過向activeMQ為它建立好的TransportConnection發(fā)送消息給activeMQ。步驟2:TransportConnection對象找到RegionBroker。步驟3:RegionBroker根據(jù)消息的類型找到對應(yīng)的消息區(qū)域(Region)。步驟4:該Region在它自己里面找到相應(yīng)的消息目的地。步驟5、6:該目的地首先根據(jù)需要進(jìn)行持久化操作,并使用待發(fā)送消息指針對象。步驟7:當(dāng)有適宜的消息消費(fèi)者、訂閱者來到時,目的地會找到這些消費(fèi)者。步驟8、9:通過該消費(fèi)者對應(yīng)的TransportConnection,發(fā)給相應(yīng)的消費(fèi)者進(jìn)程。activeMQ消息分發(fā)指針 消息分發(fā)游標(biāo)是用來保存JMS消息的引用。消息游標(biāo)的處理過程如下:1.當(dāng)producer發(fā)送的持久化消息到達(dá)broker之后,broker首先會把它保存在持久存儲中。2.如果發(fā)現(xiàn)當(dāng)前有活潑的consumer,而且這個consumer消費(fèi)消息的速度能跟上producer生產(chǎn)消息的速度,那么ActiveMQ會直接把消息傳遞給broker內(nèi)部跟這個consumer關(guān)聯(lián)的queue;3.如果當(dāng)前沒有活潑的consumer或者consumer消費(fèi)消息的速度跟不上producer生產(chǎn)消息的速度,那么ActiveMQ會使用PendingMessageCursors保存對消息的引用。4.PendingMessageCursors把消息引用傳遞給broker內(nèi)部跟這個consumer關(guān)聯(lián)的dispatchqueue。以下是兩種PendingMessageCursors:?VMCursor。在內(nèi)存中保存消息的引用。?FileCursor。首先在內(nèi)存中保存消息的引用,如果內(nèi)存使用量到達(dá)上限,那么會把消息引用保存到臨時文件中。我們可以在activemq.xml中配置消息分發(fā)指針的存儲策略。ActiveMQ的監(jiān)控1.activeMQ自動的管理站點://localhost:8161/admin2.AdvisoryMessagesActiveMQ支持AdvisoryMessages,它允許我們通過標(biāo)準(zhǔn)的JMS消息來監(jiān)控系統(tǒng).通過它我們可以得到關(guān)于JMSprovider、producers、consumers和destinations的信息。3.QueueBrowser使用QueueBrowser的消息預(yù)覽,編程提供監(jiān)控接口。actviemq配置連接URI

1.配置JMS連接最大閑置時間(消息效勞器無消息)jmsBrokerURL=tcp://65:61616?wireFormat.maxInactivityDuration=90000該wireFormat.maxInactivityDuration=90000的默認(rèn)值是30000mswireFormat.maxInactivityDuration=0這樣的參數(shù),wireFormat.maxInactivityDuration是心跳參數(shù)。防止ActiveMQ在一段時間沒有消息發(fā)送時拋出"Channelwasinactivefortoolong"異常。2.maxReconnectDelay最大重連間隔failover:(tcp://:61616?wireFormat.maxInactivityDuration=10000);maxReconnectDelay=10000failover:(tcp://localhost:61616,tcp://remotehost:61616)?initialReconnectDelay=100failover失效備援maxReconnectDelay=10000最大重連間隔3.設(shè)置異步發(fā)送消息tcp://localhost:61616?jms.useAsyncSend=truetcp://localhost:61616?jms.prefetchPolicy.all=100&jms.redeliveryPolicy.maximumRedeliveries=54.客戶端消息緩存的數(shù)量tcp://localhost:61616?jms.prefetchPolicy.all=50##設(shè)置客戶端最多緩存50條消息5.客戶端的預(yù)支取策略。tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=1

ActiveMQ穩(wěn)定性和容錯性考慮

1.保障Jms連接使用失效備援機(jī)制,和間隔自動重試機(jī)制,程序控制等方面來控制。failover:(tcp://localhost:61616)?initialReconnectDelay=100&;maxReconnectAttempts=5failovertransport是一種重新連接機(jī)制,用于建立可靠的傳輸。此處配置的是一旦ActiveMQbroker中斷,Listener端將每隔100ms自動嘗試連接,直至成功連接或重試5次連接失敗為止。failover還支持多個borker同時提供效勞,實現(xiàn)負(fù)載均衡的同時可增加系統(tǒng)容錯性,格式:

failover:(uri1,...,uriN)?transportOptionsfailover://(tcp://masterhost:61616,tcp://slavehost:61616)?randomize=falsefailover:(uri1,...,uriN)?transportOptionsfailover:uri1,...,uriNfailover:(tcp://localhost:61616)2.JMSRedelivered

如果這個值為true,表示消息是被重新發(fā)送了。因為有時消費(fèi)者沒有確認(rèn)他已經(jīng)收到消息或者JMS提供者不確定消費(fèi)者是否已經(jīng)收到。3.JMSExpiration 允許消息過期,setTimeToLive()設(shè)置消息的有效期。activeMQ的failOver重連機(jī)制"failover:(tcp://IPAddress1:61616,tcp://IPAddress1:61616)?initialReconnectDelay=100&maxReconnectAttempts=5";后面的參數(shù)initialReconnectDelay=100&maxReconnectAttempts=5“對每一個連接URI是通用的。如果沒有指定URI的獲取方式,activeMQ會自動選擇其中的一個URI來嘗試建立連接〔randomize指定隨機(jī)〕,獲取連接后,ActiveMQ會維護(hù)連接的暫停和恢復(fù)。以上面的URL為例,說明failOver的重連機(jī)制:a.IPAddress1,IPAddress2上的broker1,broker2都正常運(yùn)行,創(chuàng)立的Connection會使用IPAddress1的broker1來發(fā)送消息,這時不激活消費(fèi)者。b.關(guān)閉broker1,Connection會自動切換到broker2的URI上來發(fā)送消息。c.激活消費(fèi)者,消費(fèi)者會先嘗試broker1,由于broker1不可用,使用broker2來收消息,這時只能收到broker2上的消息。d.再重新啟動broker1,生產(chǎn)者,和消費(fèi)者都仍然使用broker2來發(fā)送和接受消息。e.關(guān)閉broker2,生產(chǎn)者和消費(fèi)者都會自動切換到broker1上,消費(fèi)者就收到之前broker發(fā)送的消息了。

failOver重連機(jī)制activeMQ平安管理1.編程式實現(xiàn) 通過ActiveMQ提供的實現(xiàn)添加消息用戶的權(quán)限〔由SimpleAuthenticationPlugin類實現(xiàn)〕。2.配置實現(xiàn)配置mq訪問者信息,activemq安裝目錄下/conf/perties權(quán)限管理,在${ACTIVEMQ_HOME}/conf/activemq.xml中配置<plugins> <simpleAuthenticationPlugin> </simpleAuthenticationPlugin> <authorizationPlugin> </authorizationPlugin></plugins>調(diào)整TCP傳輸設(shè)置TCP傳輸是activeMQ最常用的傳輸方式。其中socketBufferSize和tcpNoDelay對傳輸性能有較大的影響。socketBufferSize通過tcp傳輸發(fā)送和接受數(shù)據(jù)的緩沖區(qū)大小,默認(rèn)〔65536bytes〕tcpNoDelay-默認(rèn)為false。通常一個TCPsocket緩沖區(qū)創(chuàng)立小的數(shù)據(jù)在發(fā)送之前。啟用此選項-消息將被盡快發(fā)送。url="failover://(tcp://localhost:61616?tcpNoDelay=true)";OpenWire參數(shù)調(diào)試

parameternamedefaultvaluedescriptiontcpNoDelayEnabledFALSE消息將不會被延遲發(fā)送,每次都發(fā)送較小的數(shù)據(jù),在網(wǎng)速較慢的時候可以提高性能。cacheEnabledTRUE常用重復(fù)值(如producerId和destination)緩存使短鍵通過代替。這可以減少message的大小,在網(wǎng)絡(luò)性能比較差的時候它對性能提高有好處。緩存的查找增加額外的開銷,會增加客戶端和服務(wù)器的負(fù)載,所以添加緩存是也要基于這些綜合考慮。cacheSize1024在緩存中保存消息的最大數(shù),該值設(shè)定不應(yīng)該大于

Short.MAX_VALUE/2(即32767/2)。tightEncodingEnabledTRUECPU密集型的方法聚集處理消息。我們會建議您關(guān)閉此功能,如果代理開始消耗所有可用的CPU:)wireFormat包信息程序中截獲的傳輸格式〔wireformat〕對象:WireFormatInfo{version=7,properties={ CacheSize=1024, CacheEnabled=true, SizePrefixDisabled=false, MaxInactivityDurationInitalDelay=10000, TcpNoDelayEnabled=true, MaxInactivityDuration=30000, TightEncodingEnabled=true, StackTraceEnabled=true},magic=[A,c,t,i,v,e,M,Q]}ActiveMQ集群部署1.多個消息提供者使用Networkofbrokers,以便在broker之間存儲轉(zhuǎn)發(fā)消息。2.多個消息消費(fèi)者ActiveMQ支持訂閱同一個queue的consumers上的集群。如果一個consumer失效,那么所有未被確認(rèn)〔unacknowledged〕的消息都會被發(fā)送到這個queue上其它的consumers。如果某個consumer的處理速度比其它consumers更快,那么這個consumer就會消費(fèi)更多的消息。ActiveMQ集群部署Master/salveServer1.主輔效勞器的作用主輔效勞器:提供消息效勞。輔效勞器:提供消息的備份,效勞的備份。2.PureMasterSlave的工作方式A〕效勞端:Slavebroker消費(fèi)masterbroker上所有的消息狀態(tài),例如消息、確認(rèn)和事務(wù)狀態(tài)等。Slavebroker不提供消息效勞。Masterbroker只有在消息成功被復(fù)制到slavebroker之后才會響應(yīng)客戶。masterbroker失效的時候,slavebroker可以啟動networkconnectors和transportconnectors,提供消息服務(wù),也可以跟著停止。B〕客戶端:使用failover的機(jī)制uri=“failover://(tcp://masterhost:61616,tcp://slavehost:61616)?randomize=false”;Master/salveServer3.配置Masterbroker不需要特殊的配置。Slavebroker需要進(jìn)行以下配置:<brokermasterConnectorURI="tcp://masterhost:62001"shutdownOnMasterFailure="false">4.限制只能有一個slavebroker連接到masterbroker。masterbroker失效而導(dǎo)致slavebroker成為master之后,之前的masterbroker只有在當(dāng)前的masterbroker〔原slavebroker〕停止后才能重新生效。spring和activeMQ的結(jié)合使用spring對jms的支持,配置jms的各個組件1配置jms連接工廠<amq:connectionFactoryid="jmsConnectionFactory"brokerURL="vm://localhost"/>2配置消息隊列<amq:queuename="destination"physicalName=“queuename"/>3配置消息監(jiān)聽器<beanid="messageListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter"> <constructor-arg> <beanclass=“類路徑"></bean> </constructor-arg> <!--配置監(jiān)聽到j(luò)ms方法后調(diào)用的執(zhí)行方法--> <propertyname="defaultListenerMethod"value="printMyOut"/> <!--customMessageConverterdefine--> <propertyname="messageConverter"ref="invokeMessageConverter"/</bean>4配置消息監(jiān)聽容器<beanid="listenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <propertyname="connectionFactory"ref="jmsConnectionFactory"/> <propertyname="destination"ref="destination"/> <propertyname="messageListener"ref=

溫馨提示

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

評論

0/150

提交評論