資源描述:
《基于corba的java消息服務(wù)中間件的設(shè)計(jì)與優(yōu)化.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、基于CORBA的JAVA消息服務(wù)中間件的設(shè)計(jì)與優(yōu)化摘要CROBA、DCOM等RPC中間件在大規(guī)模的分布計(jì)算應(yīng)用中有其局限性。而Java消息服務(wù)在異步通信、松散耦合和多對(duì)多通信等方面提供了強(qiáng)有力的支持。本文介紹了CJMQ——個(gè)基于CORBA的多線程Java消息服務(wù)中間件,描述了CJMQ的體系結(jié)構(gòu),討論了消息派發(fā)機(jī)制的優(yōu)化設(shè)計(jì),并且對(duì)當(dāng)前CJMQ的實(shí)現(xiàn)進(jìn)行了性能評(píng)價(jià)和分析。關(guān)鍵字Java消息服務(wù);消息中間件;CORBA中圖分類號(hào)TP393文獻(xiàn)標(biāo)識(shí)碼A1引言當(dāng)前,CORBA、DCOM,RMI等RPC中間件技術(shù)已廣泛應(yīng)用于各個(gè)領(lǐng)域。但是面對(duì)規(guī)模和復(fù)雜度都越來(lái)越高的分布式系統(tǒng)
2、,這些技術(shù)也顯示出其局限性:同步通信:客戶發(fā)出調(diào)用后,必須等待服務(wù)對(duì)象完成處理并返回結(jié)果后才能繼續(xù)執(zhí)行;客戶和服務(wù)對(duì)象的生命周期緊密耦合:客戶進(jìn)程和服務(wù)對(duì)象進(jìn)程都必須正常運(yùn)行;如果由于服務(wù)對(duì)象崩潰或者網(wǎng)絡(luò)故障導(dǎo)致客戶的請(qǐng)求不可達(dá),客戶會(huì)接收到異常;點(diǎn)對(duì)點(diǎn)通信:客戶的一次調(diào)用只發(fā)送給某個(gè)單獨(dú)的目標(biāo)對(duì)象。面向消息的中間件較好的解決了以上問(wèn)題。發(fā)送者將消息發(fā)送給消息服務(wù)器,消息服務(wù)器將消息存放在若干隊(duì)列中在合適的時(shí)候再將消息轉(zhuǎn)發(fā)給接收者。這種模式下,發(fā)送和接收是異步的,發(fā)送者無(wú)需等待;二者的生命周期未必相同:發(fā)送消息的時(shí)候接收者不一定運(yùn)行,接收消息的時(shí)候發(fā)送者也不一定運(yùn)行
3、;一對(duì)多通信:對(duì)于一個(gè)消息可以有多個(gè)接收已有的M0M系統(tǒng)包括IBM的MQSeries、Microsoft的MSMQ和BEA的MessageQ等。由于沒(méi)有一個(gè)通用的標(biāo)準(zhǔn),這些系統(tǒng)很難實(shí)現(xiàn)互操作和無(wú)縫連接。JavaMessageService是SUN提出的旨在統(tǒng)一各種MOM系統(tǒng)接口的規(guī)范,它包含點(diǎn)對(duì)點(diǎn)和發(fā)布/訂閱兩種消息模型,提供可靠消息傳輸、事務(wù)和消息過(guò)濾等機(jī)制。我們的工作是利用C0RBA的開放、跨平臺(tái)和跨語(yǔ)言的特性,以其作為底層通信機(jī)制,設(shè)計(jì)和實(shí)現(xiàn)一個(gè)開放、高性能的JMS中間件CJMQ。CJMQ支持點(diǎn)對(duì)點(diǎn)和發(fā)布/訂閱兩種消息模型,同時(shí)支持同步、異步通信機(jī)制,提供持久
4、消息、優(yōu)先級(jí)、可靠消息傳輸保證和持久訂閱。本文首先簡(jiǎn)要介紹了JMS接口規(guī)范,然后詳細(xì)描述了CJMQ的體系結(jié)構(gòu)以及對(duì)消息派發(fā)機(jī)制的優(yōu)化措施,最后對(duì)CJMQ進(jìn)行了性能分析與評(píng)價(jià)。JAVA消息服務(wù)JMS是SUN定義的一個(gè)純接口規(guī)范而沒(méi)有任何具體實(shí)現(xiàn),它的標(biāo)準(zhǔn)API使應(yīng)用程序可以不依賴某個(gè)具體的MOM系統(tǒng)1說(shuō)明了JMS的主要概念一個(gè)JMS應(yīng)用由JMS消息服務(wù)、JMS客戶、消息、目標(biāo)和連接工廠兩種管理對(duì)象所組成。JMS消息服務(wù)提供了兩種消息模型:PTP模型和pub/sub模型,如圖1所示。在PTP模型中,消息被發(fā)往特定的消息隊(duì)列,然后由消息服務(wù)再發(fā)往接收者。PTP模型的特點(diǎn)是
5、:每個(gè)消息僅有一個(gè)接收者;接收者成功處理消息后要發(fā)出應(yīng)答。在pub/sub模型中,消息被發(fā)往基于某個(gè)主題的消息隊(duì)列,而接收者必須先在它感興趣的主題隊(duì)列發(fā)出訂閱請(qǐng)求,消息服務(wù)根據(jù)接收者的訂閱情況來(lái)決定是否將消息發(fā)往接收者。這種模型的特點(diǎn)是:每個(gè)消息也許有多個(gè)接收者;接收者可以采取持久訂閱機(jī)制。持久訂閱指的是接收者要求收到所有發(fā)往某個(gè)Topic的消息即使該接收者沒(méi)有和JMS服務(wù)器保持連接。服務(wù)器保留這些信息直到該接收者應(yīng)答或者這些消息過(guò)期。JMS消息由三部分組成:消息頭、屬性和消息體。所有的消息都有相同的頭部,包含了優(yōu)先級(jí)、生存期、可靠性等QoS信息以及路由信息。服務(wù)器
6、將依據(jù)這些信息對(duì)消息進(jìn)行處理。屬性是用戶定義的名字值對(duì),可用來(lái)進(jìn)行消息過(guò)濾和路由或者由應(yīng)用程序自己進(jìn)行處理。消息體包含要傳送的具體消息,JMS定義了五類消息:Text、Map、0bject、Stream、BytesoJMS的傳輸模式分為持久模式和非持久模式。持久模式指示JMS服務(wù)器要將消息保存在數(shù)據(jù)庫(kù)中,以防止由于服務(wù)器崩潰造成的消息丟失。JMS規(guī)范要求持久性消息的傳送要保證一次且僅有一次語(yǔ)義,即消息既不能丟失也不能發(fā)送兩次。非持久模式傳送消息更有效率,因?yàn)椴槐貙⑾⒈4嬖跀?shù)據(jù)庫(kù)中。JMS規(guī)范要求非持久性消息的傳送要保證至多一次語(yǔ)義,即消息可以丟失但是不能發(fā)送兩次。
7、CJMQ的系統(tǒng)結(jié)構(gòu)CJMQ的外部體系結(jié)構(gòu)如圖2所示,CJMQ提供了三種AH以滿足管理、Java應(yīng)用和C++應(yīng)用的需要,它們的通信協(xié)議采用標(biāo)準(zhǔn)的CORBAII0P協(xié)議以保證CJMQ的開放型以及和其他系統(tǒng)的互操作性。由于OMG會(huì)逐步擴(kuò)展各種語(yǔ)言向CORBA的映射,因此CJMQ也會(huì)增加支持其他語(yǔ)言的客戶端API。CJMQ有一個(gè)數(shù)據(jù)存儲(chǔ)層,用以存儲(chǔ)持久消息、系統(tǒng)配置參數(shù)、連接信息等數(shù)據(jù),它可以通過(guò)JDBC訪問(wèn)SQLServer、Oracle、Sybase等關(guān)系數(shù)據(jù)庫(kù)。3.2CJMQ的內(nèi)部體系結(jié)構(gòu)3顯示了CJMQ消息服務(wù)的內(nèi)部主要結(jié)構(gòu)??蛻魬?yīng)用程序通過(guò)調(diào)用CJMQ提供的J