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

下載本文檔

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

文檔簡(jiǎn)介

1、ActiveMQ消息中間件1、概述ActiveMQ 是Apache出品,最流行的,能力強(qiáng)勁的開源消息總線。ActiveMQ 是一個(gè)完全支持JMS1.1和J2EE 1.4規(guī)范的 JMS Provider實(shí)現(xiàn),盡管JMS規(guī)范出臺(tái)已經(jīng)是很久的事情了,但是JMS在當(dāng)今的J2EE應(yīng)用中間仍然扮演著特殊的地位。JMS即Java消息服務(wù)(Java Message Service)應(yīng)用程序接口,是一個(gè)Java平臺(tái)中關(guān)于面向消息中間件(MOM)的API,用于在兩個(gè)應(yīng)用程序之間,或分布式系統(tǒng)中發(fā)送消息,進(jìn)行異步通信。Java消息服務(wù)是一個(gè)與具體平臺(tái)無關(guān)的API,絕大多數(shù)MOM提供商都對(duì)JMS提供支持。 

2、JMS 使您能夠通過消息收發(fā)服務(wù)(有時(shí)稱為消息中介程序或路由器)從一個(gè) JMS 客戶機(jī)向另一個(gè) JMS客戶機(jī)發(fā)送消息。消息是 JMS 中的一種類型對(duì)象,由兩部分組成:報(bào)頭和消息主體。報(bào)頭由路由信息以及有關(guān)該消息的元數(shù)據(jù)組成。消息主體則攜帶著應(yīng)用程序的數(shù)據(jù)或有效負(fù)載。根據(jù)有效負(fù)載的類型來劃分,可以將消息分為幾種類型,它們分別攜帶:簡(jiǎn)單文本(TextMessage)、可序列化的對(duì)象 (ObjectMessage)、屬性集合 (MapMessage)、字節(jié)流 (BytesMessage)、原始值流 (StreamMessage),還有無有效負(fù)載的消息 (Message)。Java Message S

3、ervice(JMS)是 SUN提出的旨在統(tǒng)一各種 MOM系統(tǒng)接口的規(guī)范,它包含點(diǎn)對(duì)點(diǎn)(Point to Point,PTP)和發(fā)布 /訂閱(Publish/Subscribe,pub/sub)兩種消息模型,提供可靠消息傳輸、事務(wù)和消息過濾等機(jī)制。JAVA 消息服務(wù)(JMS)定義了 Java 中訪問消息中間件的接口。JMS 只是接口,并沒有給予實(shí)現(xiàn),實(shí)現(xiàn) JMS 接口的消息中間件稱為 JMS Provider,例如 ActiveMQ。2、優(yōu)點(diǎn)1) 多種語言和協(xié)議編寫客戶端。語言: Java,C,C+,C#,Ruby,Perl,Python,PHP。應(yīng)用協(xié)議: OpenWire,Stomp RE

4、ST,WS Notification,XMPP,AMQP2) 完全支持JMS1.1和J2EE 1.4規(guī)范 (持久化,XA消息,事務(wù))3) 對(duì)Spring的支持,ActiveMQ可以很容易內(nèi)嵌到使用Spring的系統(tǒng)里面去,而且也支持Spring2.0的特性4) 通過了常見J2EE服務(wù)器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的測(cè)試,其中通過JCA 1.5 resource adaptors的配置,可以讓ActiveMQ可以自動(dòng)的部署到任何兼容J2EE 1.4 商業(yè)服務(wù)器上5) 支持多種傳送協(xié)議:in-VM,TCP,SSL,NIO,UDP,JGro

5、ups,JXTA6) 支持通過JDBC和journal提供高速的消息持久化7) 支持Ajax8) 可以很容易的調(diào)用內(nèi)嵌JMS provider,進(jìn)行測(cè)試9)發(fā)送和接收是異步的,發(fā)送者無需等待;10)二者的生命周期未必相同:發(fā)送消息的時(shí)候接收者不一定運(yùn)行,接收消息的時(shí)候發(fā)送者也不一定運(yùn)行;11)一對(duì)多通信:對(duì)于一個(gè)消息可以有多個(gè)接收者。3、專業(yè)術(shù)語解釋JMS Provider:實(shí)現(xiàn)JMS 接口的消息中間件(provider:供應(yīng)者); PTP:Point to Point,即點(diǎn)對(duì)點(diǎn)的消息模型; Pub/Sub:Publish/Subscribe,即發(fā)布/訂閱的消息模型; Queue:隊(duì)列目標(biāo);

6、Topic:主題目標(biāo);Transaction:事務(wù)。 ConnectionFactory:連接工廠,JMS 用它創(chuàng)建連接; Connection:JMS 客戶端到JMS Provider 的連接; Destination:消息的目的地;Acknowledge:簽收; Session:會(huì)話,一個(gè)發(fā)送或接收消息的線程;MessageProducer:由 Session 對(duì)象創(chuàng)建的用來發(fā)送消息的對(duì)象; MessageConsumer:由 Session 對(duì)象創(chuàng)建的用來接收消息的對(duì)象; 4、JMS編程模型在 JMS 編程模型中,JMS 客戶端(組件或應(yīng)用程序)通過 JMS 消息服務(wù)交換消息。消息生產(chǎn)者

7、將消息發(fā)送至消息服務(wù),消息消費(fèi)者則從消息服務(wù)接收這些消息。這些消息傳送操作是使用一組實(shí)現(xiàn) JMS 應(yīng)用編程接口 (API) 的對(duì)象(由 JMS Provide提供)來執(zhí)行的。在 JMS 編程模型中,JMS 客戶端使用 ConnectionFactory 對(duì)象創(chuàng)建一個(gè)連接,向消息服務(wù)發(fā)送消息以及從消息服務(wù)接收消息均是通過此連接來進(jìn)行。Connection 是客戶端與消息服務(wù)的活動(dòng)連接。創(chuàng)建連接時(shí),將分配通信資源以及驗(yàn)證客戶端。這是一個(gè)相當(dāng)重要的對(duì)象,大多數(shù)客戶端均使用一個(gè)連接來進(jìn)行所有的消息傳送。連接用于創(chuàng)建會(huì)話。Session 是一個(gè)用于生成和使用消息的單線程上下文。它用于創(chuàng)建發(fā)送的生產(chǎn)者和接

8、收消息的消費(fèi)者,并為所發(fā)送的消息定義發(fā)送順序。會(huì)話通過大量確認(rèn)選項(xiàng)或通過事務(wù)來支持可靠傳送。客戶端使用 MessageProducer 向指定的物理目標(biāo)(在 API 中表示為目標(biāo)身份對(duì)象)發(fā)送消息。生產(chǎn)者可指定一個(gè)默認(rèn)傳送模式(持久性消息與非持久性消息)、優(yōu)先級(jí)和有效期值,以控制生產(chǎn)者向物理目標(biāo)發(fā)送的所有消息。同樣,客戶端使用 MessageConsumer 對(duì)象從指定的物理目標(biāo)(在 API 中表示為目標(biāo)對(duì)象)接收消息。消費(fèi)者可使用消息選擇器,借助它,消息服務(wù)可以只向消費(fèi)者發(fā)送與選擇標(biāo)準(zhǔn)匹配的那些消息。消費(fèi)者可以支持同步或異步消息接收。異步使用可通過向消費(fèi)者注冊(cè) MessageListener

9、 來實(shí)現(xiàn)。當(dāng)會(huì)話線程調(diào)用 MessageListener 對(duì)象的 onMessage()方法時(shí),客戶端將使用消息。 5. JMS編程域JMS 支持兩種截然不同的消息傳送模型:PTP(即點(diǎn)對(duì)點(diǎn)模型)和 Pub/Sub(即發(fā)布 /訂閱模型),分別稱作:PTP Domain 和 Pub/Sub Domain。 PTP(使用 Queue即隊(duì)列目標(biāo))消息從一個(gè)生產(chǎn)者傳送至一個(gè)消費(fèi)者。在此傳送模型中,目標(biāo)是一個(gè)隊(duì)列。消息首先被傳送至隊(duì)列目標(biāo),然后根據(jù)隊(duì)列傳送策略,從該隊(duì)列將消息傳送至向此隊(duì)列進(jìn)行注冊(cè)的某一個(gè)消費(fèi)者,一次只傳送一條消息。可以向隊(duì)列目標(biāo)發(fā)送消息的生產(chǎn)者的數(shù)量沒有限制,但每條消息只能發(fā)送至、并由

10、一個(gè)消費(fèi)者成功使用。如果沒有已經(jīng)向隊(duì)列目標(biāo)注冊(cè)的消費(fèi)者,隊(duì)列將保留它收到的消息,并在某個(gè)消費(fèi)者向該隊(duì)列進(jìn)行注冊(cè)時(shí)將消息傳送給該消費(fèi)者。 Pub/Sub(使用Topic即主題目標(biāo))消息從一個(gè)生產(chǎn)者傳送至任意數(shù)量的消費(fèi)者。在此傳送模型中,目標(biāo)是一個(gè)主題。消息首先被傳送至主題目標(biāo),然后傳送至所有已訂閱此主題的活動(dòng)消費(fèi)者。可以向主題目標(biāo)發(fā)送消息的生產(chǎn)者的數(shù)量沒有限制,并且每個(gè)消息可以發(fā)送至任意數(shù)量的訂閱消費(fèi)者。主題目標(biāo)也支持持久訂閱的概念。持久訂閱表示消費(fèi)者已向主題目標(biāo)進(jìn)行注冊(cè),但在消息傳送時(shí)此消費(fèi)者可以處于非活動(dòng)狀態(tài)。當(dāng)此消費(fèi)者再次處于活動(dòng)狀態(tài)時(shí),它將接收此信息。如果沒有已經(jīng)向主題目標(biāo)注冊(cè)的消費(fèi)者,

11、主題不保留其接收到的消息,除非有非活動(dòng)消費(fèi)者注冊(cè)了持久訂閱。這兩種消息傳送模型使用表示不同編程域的 API 對(duì)象(其語義稍有不同)進(jìn)行處理,如下所示:基本類型統(tǒng)一域PTP域Pub/Sub域ConnectionFactoryQueueConnectionFactoryTopicConnectionFactory ConnectionQueueConnectionTopicConnection SessionQueueSessionTopicPublisher Destination(Queue或 Topic)QueueTopic MessageProducerQueueSenderMessage

12、ConsumerQueueReceiver QueueBrowserTopicSubscriber6. JMS消息結(jié)構(gòu)JMS 消息由以下幾部分組成:消息頭,屬性和消息體。 6.1、消息頭(Header)消息頭包含消息的識(shí)別信息和路由信息,消息頭包含一些標(biāo)準(zhǔn)的屬性如:JMSDestination,JMSMessageID等。消息頭由誰設(shè)置描述JMSDestination(目的地)send方法消息發(fā)送的目的地。JMSDeliveryMode(傳送模式)send方法兩種模式: PERSISTENT 和NON_PERSISTENT,PERSISTENT 表示該消息一定要被送到目的地

13、,否則會(huì)導(dǎo)致應(yīng)用錯(cuò)誤。NON_PERSISTENT 表示偶然丟失該消息是被允許的,這兩種模式使開發(fā)者可以在消息傳送的可靠性和吞吐量之間找到平衡點(diǎn)。JMSExpiration(消息過期時(shí)間)send方法等于 Destination 的send 方法中的timeToLive 值加上發(fā)送時(shí)刻的GMT 時(shí)間值。如果timeToLive 值等于零,則JMSExpiration 被設(shè)為零,表示該消息永不過期。如果發(fā)送后,在消息過期時(shí)間之后消息還沒有被發(fā)送到目的地,則該消息被清除。JMSPriority(消息優(yōu)先級(jí))send方法從 0-9 十個(gè)級(jí)別,0-4 是普通消息,5-9 是加急消息。JMSM

14、essageID(信息ID)send方法唯一識(shí)別每個(gè)消息的標(biāo)識(shí),由JMS Provider 產(chǎn)生。JMSTimestamp(時(shí)間戳)send方法一個(gè)消息被提交給JMS Provider 到消息被發(fā)出的時(shí)間。JMSCorrelationID(回復(fù)ID)客戶用來連接到另外一個(gè)消息,典型的應(yīng)用是在回復(fù)消息中連接到原消息。JMSReplyTo(回復(fù)地址)客戶提供本消息回復(fù)消息的目的地址JMSType(類型)客戶消息類型的識(shí)別符。JMSRedelivered(再次發(fā)送)JMS Provider如果一個(gè)客戶端收到一個(gè)設(shè)置JMSRedelivered屬性的消息,則表示可能客戶端曾經(jīng)在早些時(shí)候收到過該消息,但

15、并沒有簽收(acknowledged)。6.2、消息體(Body)JMS API 定義了 5種消息體格式,也叫消息類型,可以使用不同形式發(fā)送接收數(shù)據(jù)并可以兼容現(xiàn)有的消息格式,下面描述這 5種類型:消息類型消息體TextMessagejava.lang.String對(duì)象,如xml文件內(nèi)容MapMessage鍵/值對(duì)的集合,鍵是 String對(duì)象,值類型可以是Java任何基本類型BytesMessage字節(jié)流StreamMessageJava中的輸入輸出流ObjectMessageJava中的可序列化對(duì)象Message沒有消息體,只有消息頭和屬性7. 消息模型7.1、PTP模型 PTP(Point

16、-to-Point)模型是基于隊(duì)列的,生產(chǎn)者發(fā)消息到隊(duì)列,消費(fèi)者從隊(duì)列接收消息,隊(duì)列的存在使得消息的異步傳輸成為可能。和郵件系統(tǒng)中的郵箱一樣,隊(duì)列可以包含各種消息,JMS Provider 提供工具管理隊(duì)列的創(chuàng)建、刪除。JMS PTP 模型定義了客戶端如何向隊(duì)列發(fā)送消息,從隊(duì)列接收消息,瀏覽隊(duì)列中的消息。下面描述 JMS PTP 模型中的主要概念和對(duì)象:名稱描述ConnectionFactory客戶端用 ConnectionFactory,創(chuàng)建Connection對(duì)象。Connection 一個(gè)到 JMS Provider 的連接,客戶端可以Connection 創(chuàng)建Session 來發(fā)送和接

17、收消息。Session客戶端用Session 創(chuàng)建MessageProducer 和MessageConsumer 對(duì)象。如果在Session 關(guān)閉時(shí),有一些消息已經(jīng)被收到,但還沒有被簽(acknowledged),那么,當(dāng)消費(fèi)者下次連接到相同的隊(duì)列時(shí),這些消息還會(huì)被再次接收。Destination(Queue或TemporaryQueue)客戶端用 Session 創(chuàng)建Destination 對(duì)象。此處的目標(biāo)為隊(duì)列,隊(duì)列由隊(duì)列名識(shí)別。臨時(shí)隊(duì)列只能由創(chuàng)建它的Connection 所創(chuàng)建的消費(fèi)者消費(fèi),但是任何生產(chǎn)者都可向臨時(shí)隊(duì)列發(fā)送消息。MessageProducer客戶端用MessagePro

18、ducer 發(fā)送消息到隊(duì)列。MessageConsumer客戶端用MessageConsumer 接收隊(duì)列中的消息,如果用戶在receive 方法中設(shè)定了消息選擇條件,那么不符合條件的消息會(huì)留在隊(duì)列中,不會(huì)被接收到。Reliability (可靠性)隊(duì)列可以長久地保存消息直到消費(fèi)者收到消息。消費(fèi)者不需要因?yàn)閾?dān)心消息會(huì)丟失而時(shí)刻和隊(duì)列保持激活的連接狀態(tài),充分體現(xiàn)了異步傳輸模式的優(yōu)勢(shì)。7.2、PUB/SUB模型JMS Pub/Sub 模型定義了如何向一個(gè)內(nèi)容節(jié)點(diǎn)發(fā)布和訂閱消息,這些節(jié)點(diǎn)被稱作主題(topic)。主題可以被認(rèn)為是消息的傳輸中介,發(fā)布者(publisher)發(fā)布消息到主題,訂閱者(su

19、bscribe) 從主題訂閱消息。主題使得消息訂閱者和消息發(fā)布者保持互相獨(dú)立,不需要接觸即可保證消息的傳送。下面描述 JMS Pub/Sub 模型中的主要概念和對(duì)象:名稱描述 subscription (訂閱)消息訂閱分為非持久訂閱(non-durablesubscription)和持久訂閱(durablesubscrip-tion),非持久訂閱只有當(dāng)客戶端處于激活狀態(tài),也就是和JMS Provider 保持連接狀態(tài)才能收到發(fā)送到某個(gè)主題的消息,而當(dāng)客戶端處于離線狀態(tài),這個(gè)時(shí)間段發(fā)到主題的消息將會(huì)丟失,永遠(yuǎn)不會(huì)收到。持久訂閱時(shí),客戶端向JMS 注冊(cè)一個(gè)識(shí)別自己身份的ID,當(dāng)這個(gè)客戶端處于離線時(shí),JMS Provider 會(huì)為這個(gè)ID 保存所有發(fā)送到主題的消息,當(dāng)客戶再次連接到JMS Provider 時(shí),會(huì)根據(jù)自己的ID 得到所有當(dāng)自己處于離線時(shí)發(fā)送到主題的消息。ConnectionFactory客戶端用 ConnectionFactory 創(chuàng)建Connection對(duì)象。Connection一個(gè)到 JMS Provider 的連接,客戶端可以用Connection 創(chuàng)建Se

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論