文档库 最新最全的文档下载
当前位置:文档库 › 基于JMS和MDB的异步通信的研究与开发

基于JMS和MDB的异步通信的研究与开发

隧亘垂塑雯豳豳鳗亟翌网络与通信竞耄编号":1008--0570(2007)09-3--0165-93

基于JMS和MDB的异步通信的研究与开发

Researchanddevelopmentofasynchronouscommunicationbasedo疗JMSandMDB

(重庆邮电大学)张晓锋李秉镨

ZHANGXIAOFENGLIBINGZH

揣娄:异步通信敢簿一静赫藕合对分书武通蓿模式。允许宣霸程序中耐炭莲方和蒜牧方蛾鹈互矬立耐搿式通过变换蓿急避静透信。考鑫戴美在盎韭遘惠薮务争砖重要拄,为或挺盎?一辞基于l辆S争漠惠驱稚轴瓣酶暑步速嚣箍型,幸唾薅x醚己辑装散箍,并蛄夸JMS中。点蓟点”和4裳带,订闲”两种|嗨怠通信模走.论避了电子商务申髓豢信怠系统砖嘉体典瑰.敲中覃娃簧±If谊模型的使用让谊系统曼加最活和易扩展.井有敷的提高了异步道怙的性能和可靠性。

关键词:异步通情;Jaw消息服务(JM【s);消息驱动Bean(MDB);XML;点蒯点;发布,订阅

审圈分类号:|n’393文戢标识码徂

Abstract:Asyachrono世commullicationl巷8kindofbosemodeof

di矧hledcoummnicatlonsystem.whichpermh特nderandreceiwrdapplicationcommunicateindependen曲viaexchan西ngmessage.Consideringit’8hnportaneeinenterprise’smessageservice,瓣BmodelofasynchroaouscommunJcalionsoNJMSandMDBisbroughtforwardhere.themodelencapsulatesda饵byusingXMLamIi11-legratedthePoint—to—PoimmodeandthePublish/Sub{serlbemode.theimplenentationofstockinformationsystemine-conllueroew船discussed。Inthecad.theusageafmodelmakesthesystemⅡ№碍flexibleandextensibleandimprovesthepeffatmaneeandreliability“asynchronmmcommunieatiorteffectlvdy.

Keywords:Asynchronouseoramuaie潍tion.JMS,M静B,XML,P2P,Pub/Sub

引言

基于毯8辩斑撵串.霉户程蒜嚣麓翡逶莛是避避黠会话Bean和实体Bean的屙步远程方法调用来实现的。EIB采用RMI—HOP作为同步调用的底层传输协议,当服务嚣处理客户请求时.客户端必须等待直到服务器处理完请求才能继续相应的进程。同对.当掌户调用服务嚣的时候,服务器有可能出现崩溃导致吝户不裁完成覆辑攥律,这转耩营魏运痿方式影璃了系统的性能帮可靠幢。为此本文挺跚了一种基于JMS释MDB并采用XML封装传输数据的异步通信模型,并把它磁用剜一个实际的股票信息幕统中。

1删S概述

盘韭缀瘫薅簿委一静舅参薛、嚣辩囊曲耩塞蒋遴。游患系缆就是用来为备个应用程序提供斌种可靠的异步通信服务的.它在通信双方之间扮演了一个筒向消息的中问件(Me5.sage_OrientedMiddleware,MOM)的角色。它提供了一个健壮的通绍瑶,把程序摄扶复袭豹通信娃理中解放生来。只簧玻藤程穿之霾遘蕹蓑室鹩蒋患格式,耪霉以避行蘑毒棼、霹纛辩释灵话的异步通信。

在J2EE体茉中。处理异步消息的能力是通过J^IS襄现的。Java消息服务UM{;)是SUN公司提出的旨在统一各种消息中间件豢境接口的规葱+宦给面商蒋患∞巾潮苹孛提供7.一囊豁准的J8强接瑶.诲多满意审耘季孛r蠢都在冀蠛骞戆矗疆之上撼供了弹sAPI.这使得Java程序能够与其他谮裔编写的程序交按满意。

张跷峰:硕士研究生

基金项目:■庆市自然科学基盒礤目fNO.2005BB2063)JMS遐异步通信.JMS霹户之间不必为了蹙换消息而并发地谜行。鄢孙驾发送客户端W以送消息而不必等待接收端客户端地爱斑,霉户蝗蒋燕息燕遘绘基懿她f主题露敬舞X蠹接收客户蟪删鲢断这个目的蟾.礴息爵能被发送科一个甚至许多个嚣户端。但生产者和MOM之间的通信则必颁是同步的。

1.1JMS体系结构

JMS体系结构由JMS客户端(消息生产者和消费者)、JMS提供嚣港瑾建象涟接£厂彝嚣羲琏)释燕惠鳝最。宅艇之趣豹蔗

■目S##{Ⅻ

瞬1JMS的体系结构

1.2JMs的两种通信模式

JMS支持嚣静嚣释遥贫摸式:&int-to-PoInt(P2砖嚣鬟枣,订潮摸式gab/Sub)。

pTP模型是基于队列的。发进方发消息到趴列.接收方从队剃接收消息,队列的存在使得消息的肄步传输成为可能。

Pub/Sub模型定史了如何向一个内容节点发布和订阅消塞,波些葛赢整葬蓐生鬻枉b寐l

主题可敷羲获秀燕涟息蕺俦输串奔,发带耆(publish嘲发靠消息到主题.订阕者(sub虬rihed扶主题订阅消息。主题使得消息订阏者和消息发布者柏}持互向独立,不需要接触即可保证消息的传避。

@黜#部两订冁82-946380.51#-一165—

 

万方数据

网络与通僬中文辕心期刊‘微计算机信息'f麟控一体{l二)2007年爨23卷举乳3期!!■I—III—I————..。。—————————II————————..。.————————.—————————————————————————————————————————一—————————————III—IIIII—I———————SI■!!詈L3jhls满息的格式为了使应用程序和F2B组件通过消息异步地震换信息并保证系JMS应用程序的最终目的是生产和消费被萁他程序处理统异构信息格式的一致性,设计了选样一种模激,如图2所示:的满息。JMS满息出以下凡部分组艘:消息头、巍性、游息体。

2MDB概诩l

2ttMDB瓣舟

渍塞驱秘Bean(MesSageDriven耘棚’蘅称MDB)是J2EE串兰种EJB之一。它总是被部署成为扮演消息消费者的客户端。其设计思路是把监听清息是否到达的任务从EJB组件转移到容器,MDB缓辞总是在察嚣辩控翻之下运行。窖器戎替MD丑监晰特定的队列或主题,当消息到达时,一十MDB实例从消息队列或消息主题中读戢消息;同时.消息可以在事物上下文串装交嚣绘满意驱魂Bean。强便onMessage方法羹靛所膏操作都作为单独事物的一部分,如果消息处理回漩。那么消息将被重新交付。

挺DB必簇叛壹接或瓣接雏方法蜜褒两夸援强懿粪;涵v皇x。ejb.MessageDrlvenBean和iavaxjms.M蝴啦一

geLister。其中.javax.jms、MessageLister接口中的onM∞sage0方法毒唯一瓣参数iavax,j№.Measage.

萁值可以照任5种JMS消息樊型之一。谈方法为MOB处理接收到的消息时调用此方法,每个MDB只鸵处理一条消息,单巾MDB不能援衷舞发箍理鹅意,舞是窑嚣瓣鞋遥过缓鸯多十MDB来并靛处理消息。’

2.2MDB的生命周期

巍割建满意驱动Bean实铡时。鞑器霉嚣善先扔攘一个涟息驻渤Bean实黼.然后.释器调用setMessageDr-

iverContext0并提供给MDB一十MessageDrlvenConteⅨt(可访|霹察器提供的运行时舜上下文的挝BContext抟一千子类}辨实例。飙蔼椅MesmgeDrivenContext辩象和这个实铡籀关联.最后调用ejbCreateO方法.B—

e雌宴铡教瓣扭到幕一特定MDB舳池中势准备稿费萃ll娃理消患。弱清患鹫达时.扶讹串取出Bean宴铡弗调用其onMes-B矩e0方法。当onMessageO方法返回时,Bean实例即返回到池中并礁罄处理男一个消息。如果窑器需要减少池的大小,或如纂鼹务器美麓,粥在褰铡丢嘉辩对实铡祷糟ejbRent髀eO方法。

3XML概逃

XML(eXteresihieMarkupLanguage.霹扩震糍记疆畜}整数器表示的一个开艘标准.它定义了数据蹙换的规械.这种规范独立于机器硬件平台、操作系统、提供商和编程语黼+可以在变拯双方疆某一簿鼗牵擐据特定霉隶定裁。XML其露培撺缝、掰扩展性、自描述性锋特点。在JMS中可以涌过xML作为中介媒体来实现数据的交捷和资源的共享。

4基予JMS翔MDB豹异步通信模黧4.I模型设计一

JMS溃盎藏舞器程EJB容器燕裁够瓤署鹫批E瘟蘑鞭务器串.斑用服势嚣为EjB构件和jMs搬供了一十靛好构运籽环境并提供系统绒的服务.包括事物、安套、持久化以及组件宴倒的生命舞壤管理等。采熙软梅伴辨恩懋变理疆意攀葫Bean。蓦于Jh懈和MDB鹪异步通信模型,使成用程序和EJB组件之何并不赢接相互影响.而是通过JM5规瓶中的队列和主题联系。

+团一!至夏7

{三】。矛

瑚s服备嚣EJB服务器

掰;建瑶骓务器

蹦2基手JMS和MDB的异步通信模型

f{j簿对皋薅P2P秘Pub/Sub薅耱演塞传送攘式。程裁务嚣端建立一个消息队列(Queue)和消息节点fropie).队列可以恽证消怠安全.即使服务器意外重启,里面的消息也不会丢失。并且考一种辊裁缳菠酞巅孛瓣渣患其会被娃理一次。满盎节纛缳存返嗣给消息订胡者。

(2)由于XML具有扩展性好、绪构化能力较强并且与平台戈凳蜘特点。势显在强ls蠖转车,支搏将XML撵为TeatMes-sage类型的消息.因此在模型中用消息服务组件负责封装、解析泼送和监昕xML消息.通过整合JMS和XML,将保证应用程廖之趣的投耦台性、棚对于其它数据耱式较坻翦复载、数据鹩茹读性和数据交换鲍筒单性。

(3)消息驱动Bean监听服务器.以凡FO的顺序处理队列申辩游息.并农响应满慧巾捶^发送考的l蛰攫性,娃壤逐墨蔫意确认。

4.2各组成部分

下蕊对模型中备组成裸分进行详缨描述。

fl潲意受藏:鞲息受载是客户Z勰俦递消息的魂嚣。拉EE的消息机制中规定了以下5种消息类型:

文本消息CrextMessage),对象消患《Ohj耐赫e懈辞},瑶一值对消息f强乎醚ess赡睁。藏滇意(¥t∞eamMessage).

字节梢息(BytesMessage)。它们的根接口是javax.jms.Me㈣ge。‘圆穗惠撬耩静域:氆掰j雒S秘MDB赴理舅步演患对,器要选择消息机制的域。有两种域:发布/订阅方式和点到点方斌。这两种域所对应的潢息目标分别是主瓤mpic)和队列(Queue)。

f3{浸意窖户臻:燕禚游意发送端鞍穗鑫接毅端。通帮为一十凭状态的尝话EJB.

(4)消息监骈器:消息驱动Bean充当消息目标的监昕器.消意麓断媸珏辩方珐包含辨DB在接牧强溃意辩魏韭务澎嚣。1llI)B可以通过异步方法调用把消息传递给另一个企业Bean组件、把消息发邀到另一十消息目标.或者执行业务逻辑自符处理浸最程更囊数据痒。

(5)消息持久化:消息可以是持A性的.也可以是非持久性的。持久性的消息表示该消息一定要被送到目的地。否则会导致寝尾错误。嚣{孝久性瓣端意表拳鹱热丢失竣蔼意是教兜详的。这两种模斌使开发者可以在消息传递的可靠性和吞吐量之间找到平衡点。在JMS消息服务器中.消息的持久性可以通过演患震牲击DeliveryMode采满节.掰强取羹PEPSISTENT或NON_PERSISTENT,前者袭示消息妊颁持久化.后者表示消息不黼持久化。在事物会语中处理的消息总是持久性的。

一166—360元/串邮局订闻号:82-946 

万方数据

簸荫琵耍孬虱掰褫幕王霸

网络与通信5基予模型的股鬃信息系统的结构经褥铡了广泛的应鼠MDB提供了一种将IMS和EJB集成起警实瑗

综合以上的讨论.本文在胜慕惰患系统中采用了谈模型。搬易所通过信息发送客户端将每种股票的股价发送鳙股票服势器.然后服务器启动发布股价信息的Bean,订阅客户端订阅鞭务器发布的骰价信息。其中消息客产端发送消息缭撒务器果糯P2P横式,嚣毒翡叛赞信塞霉谈发枣骜铀eⅡe孛,瓣萄疆毒窳多客户鼠服务器订阅股票价格倍息.故服务器发布敝槊价格才有Pub/Sub模式.即服务器将价格信息发布到目的地(Topic),订阅客户端从目的地中订阋报价信息。诙系统的结构撼豳如罔3所示。

潮3股票信息系统壤型罔

隽了肇掬潦壤。结撵零孛誊臻了攘整孛熬溥皇凝骞维捧,在实际开发中,谈缱俘是存在的。

下面给出系统中燕键技术具体实现韵部分代码。

5,1创建股价信息发送者

//J:下文韧抬他.查找ConnectionFactory和DeBtlnafion舱“eH砖。Context嘲№x缸确ewInitialContext(properfie靠QueueConnectionFactoryfactory2(QueueConnectionFactory)context.100kup(“My-connectionFactory”x铷eH8queue--(Queue)contextlookup(“StockQaeueName”≥嬲|立JMS连臻

QLIeueConnecfion

connection=queueConnectionFactery—c/eat6‘-QueueConnectiono:

∥用连接创建套话

QueueSesslonse∞ion=connectlon.crvabeQueueSession(Mse,Sessiv。n。AUTO_ACKNOWLEDGE{;硐会话创建消息发送者

QueueSendersender=session,cmateSender(queue);

Ⅳ产生消息

TextMessagemessage=session.createTextMessage0;//发送浸患sender.send(message);5.2利用MDB创建股价消息接受者玎判断消息粪捌

遁“sginstanceofTextMcssagc){TextMessage搬essa驴=露kxt氍es糕萨拉#垂萨疆毓麓铡喇;Ⅳ将接收到的1j殳价信息发布出_嘉

TopicPublisher.send(stock.getStockNameO,的撤价是:”+stock.getPrice0+“党”k

}6结论异步消息在如业应用集成和即时性不高的应用系统中已采懿方法,娄系统霉要黻一耱鞋藕寺翦霹嚣瓣方式避番彝参涟信时.辩璐考虑使用率文中的这种模墅+充静静j用强fs和MOB的优点。可以加快应用程序的开发、部署翔维护速度,同时由乎JMS松耦合的特点.可方便的对模型和应用谈模型的系统j拄行扩展。斑基于这种模型的股票信息系统的斑用中,不仅有效的

窦瑶≯歉爨疆怠戆异爹渡发,霉且太大降低7拜发或车,颡量}该磺瓣新取得的羟诲效藏为2万元。

率义作者创新点:将JMS和MDB有机的结合起来构成一种异步通信模型,采用XML封装数据,并在模型中同时采用P1_P和Pub/Sub两种模式进行消息的传输。现实中韵大部分应用壤溅冀是采用玛霉秘Pub/Sub两种模式审懿一种,没有充分发挥接jll4S襄MDB蛑饨点。

参考文献

【1】隋杨+吴泉涌.消息中问件JMS接口的设计与实现[J]微计算机信息.2006.10-3:210-212。翻日av8MessageServiceSpecificationV1.1IS],轴nMicmsystem,2∞2旗,f3】MarkusVoher,AlexanderSchmld服务器组件模式【M】-北京:帆械工业出版社,2004.133—169.【4】刘晓华.精通Java核心技术【M】北京.电予工业出版社.2003.作者麓赍:张骁锋(1978一)。舅(设),菠西挠巍人,硬士研究生,生

要煞攀计算撬霜络与避嚣酶鞭竞;享秉管(1946-),男(投}.掰托唐山人.重庆邮电大学教授、博士生导师,童饕计算机网络与避信的研究。

Biography:ZhangXisofemg(1978一).Male(}lankShangxi,Master,

Stud),field:Computer1%tworkstmdCornmtmicafinnLIB;酬(1946一》,Male《ha,),Hebei,Professor,Studyfield:Computer]Net-worksandCommtmication,(40006S重庆重庆邮电太学)张晓锋章繁智(chongqingUniversltyofPostsmndTelecommunications,Chongqing4000醪,china)ZhangXiaofengIABingzhi

避懿蟪蹬:(400065重痰郏电太学76#信蒋)强硗锋(收穑日期:2007.7.∞)(修稿日期:2007.8.05)I上撩第174页)

瑟】张蒸溢,赵彦,邓洪涛。AdHoe甄络孛瓣~辨薪型分簇方法[趣徽诤葬帆信息2006.2:98-100

作者简介:丛簿鹏,男,汉,山东威海(19820磺士研究生,研究靠向:计算机应用技术;赵建军:男,汉,江苏南通(1965一)教授,博士生导师。模式识别与智能控制。Biography:CongHai一辨增male,maserofNAVALAERO—NAU鞭CALENGINEERINGINS疆嘲.(2rvmot海军航空工程学院201教研蜜)裁避军伫64001海军航空工程举院研究生二队)占&海鹏刘培堵雷久德(NavalAeronauticalEngineeringImtimre,YanTai,264001)ZhaoJ}&垮∞CongHMpengLiuPeiveiLeiJiude通讯地址:(264001出累燔台海军航空薯獠学院研究生:敬'丛海鹅r收稿日期:2007.7.03)0}稿日期:2007:8.悯图垂垂砸@喇#蚌蒋母趣号:82艄湖元,辜一167~ 万方数据

相关文档
相关文档 最新文档