




已阅读5页,还剩65页未读, 继续免费阅读
(计算机软件与理论专业论文)基于jms的消息中间件的设计与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于j m s 的消息中间件的设计与实现 摘要 消息中间件是中间件的一个重要分支,它采用消息的方式为网络计算提 供了异步低耦合的编程架构。j a v am e s s a g es e r v i c e ( j m s ) 是南s u n m i c r o s y s t e m s 公司提出的基于j a v a 技术的消息中间件的规范。它有效地屏 蔽了网络协议、应用实现的具体技术、操作系统和数据库的细节,目前已被 各大软件公司和开源组织所接受,成为了工业界的事实标准。本文的主要工 作就是设计并实现了一个完全符合j m s 规范的消息中间件产品:m y j m s 。 产品在设计上引入了单类、抽象工厂和适配器等设计模式,保证了系统 架构的稳定性和可扩展性;作为j m s 提供者,产品建立了出版订阅和点到点 的两种消息模式,实现了全部的j m s 标准a p i ,提供了消息持久化、消息预 览和消息选择功能:基于j 2 e e 技术,产品建立了可靠的线级通讯连接,提供 了名字与目录服务,完成了会话层和表示层的封装,为应用层的网络应用提 供了透明接口;同时在服务器端实现了垃圾清理、事件监听和多线程管理等 机制,提高了产品的服务质量。 在己实现产品的基础上,本文还提出了一种基于消息中间件的应用系统 集成方案。它通过m y j m s 为分布在网络上的不同系统提供了可靠的异步通讯 和消息交换,并给出了具体的程序范例。 关键词:消息中间件j m sj 2 e e 设计模式应用系统集成 m e s s a g eo r i e n t e dm i d d l e w a r eb a s e do nj m s a b s t r a c t m e s s a g eo r i e n t e dm i d d l e w a r e ( m o m ) i s a ni m p o r t a n tb r a n c ho fm i d d l e w a r e w h i c hu s e sm e s s a g et ob u i l da l la s y n c h r o n o u sa n dd e c o u p l e dp r o g r a m m i n ga r c h i t e c t u r e f o rn e t w o r kc o m p u t i n g j a v am e s s a g es e r v i c e ( j m s ) i sas p e c i f i c a t i o nf o rm o mb a s e d o nj a v al a n g u a g ea n d w a sc r e a t e db ys u nm i c r o s y s t e m s i tm a s k st h eh e t e r o g e n e i t yo f n e t w o r kp r o t o c o l ,p r o g r a m m i n gl a n g u a g e ,o sa n dd a t a b a s ea n di sb e c o m i n gt h e s t a n d a r di ni n d u s t r y i nt h i st h e s i s ,aj m sm i d d l e w a r ep r o d u c ti sd e s i g n e da n d i m p l e m e n t e d as e r i e so fd e s i g np a t t e r n s ,i n c l u d i n gs i n g l e t o nc l a s s ,a b s t r a c tf a c t o r ya n d a d a p t e r , a r ei n t r o d u c e do nd e s i g no ft h ep r o d u c t m y j m sc r e a t e sp u b l i s h s u b s c r i b ea n d p o i n t - t o p o i n tm e s s a g i n gm o d e l ,i m p l e m e n t s a l lj m sa p i ,p r o v i d e s p e r s i s t e n t m e s s a g i n g ,m e s s a g eb r o w s e ra n dm e s s a g es e l e c t o ga sam i d d l e w a r e ,m y j m sc r e a t e s r e l i a b l ew i r e l e v e lc o m m u n i c a t i o na n dj n d is e r v i c e ,w r a p st h el o w e rl a y e ro fn e t w o r k a n dp r o v i d e si n t e r f a c e sf o ra p p l i c a t i o nl a y e lb e s i d e s ,s e v e r a ls y s t e ms e r v i c e s ,l i k e g a r b a g ec o l l e c t i o n ,e v e n tl i s t e n e ra n dt h r e a dp o o lm a n a g e m e n ta r ea l s op r o v i d e si nt h e p r o d u c t a tl a s t ,as c h e m eo fa p p l i c a t i o ni n t e g r a t i o ni sp r e s e n t e d t h r o u g hm y j m s ,t h e a p p l i c a t i o n sd i s t r i b u t e di nn e t w o r ka r ei n t e g r a t e db yt r a n s m i t t i n ga n de x c h a n g i n g m e s s a g eb e t w e e ne a c ho t h e r k e yw o r d s :m e s s a g eo r i e n t e dm i d d l e w a r e ,j m s ,j 2 e e ,d e s i g np a t t e r n ,a p p l i c a t i o n i n t e g r a t i o n i i 合肥工业大学 本论文经答辩委员会全体委员审查,确认符合合肥工业大学 硕士学位论文质量要求。 答辩委员会签名 飘:靡 i 渺 吲硼 i 12 纪 职称 簇腹 彳彤砒袭扳 , t 移一 飘渺翰“爱 师导 独创性声明 本人声明所呈交的学位论文是本人在导师指导f 进行的研究工作及取得的研究成果。据我所 知,除了文中特别加以标志雨i 致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果, 也不包含为获得企筵王业态堂或其他教育机构的学位或证| s 而使用过的材料。与我一同作 的同志对本研究所做的任何贡献均已在论文中作了明确的说明j f 表示谢意。 学位论文作者签字:年 ;釜,签字日期:m 年6 月f 彦日 学位论文版权使用授权书 本学位论文作者完全了解盒目b 些友堂有关保留、使用学位论文的规定,有机保留并向 国家有关部门或机构送交论文的复印件和磁盘,允许论文被查阅或借阅。本人授权盒妲王些厶 羔二一可以将学位论文的全部或部分论文内容编入有关数据库进行检索,可以采用影印、缩印或扫 描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后适用本授权书) 学位敝者签名_ 奇强 签字日期:泖年寺月i t 日 学位论文作者毕业后去向: 1 :作单位; 通讯地址: 导师始矣幽风 签字日期:毒甘心年占月f g 目 电话 邮编 致谢 三年研究,i - 的生活和学习马 = 就要进入尾声,在各位老师的指导和同学们的帮 助下,我在各个方面都取得了一些成绩。衷心感i 身f 我的导师吴国风副教授! 几年来, 导师在学习、研究、生活等各个方面给予我悉心的指导和帮助。她诲人不倦的良师风 范,严谨务实的治学态度,使我在学业上受益匪浅。在此,我谨以最诚挚的心情向我 的导师吴国凤副教授表示衷心的感谢! 同时,感谢李勇、袁继彬、郭亚光等同学,本 文的写成也离不开他们的无私帮助。 在此,我还要特别感谢我的妻子,在我忙于学业、研究、开发和准备论文的时 候,她几乎承担了全部的家务。更为重要的是,当我在学习、生活上遇到困难和挫折 时,她总能在思想和精神上给我以安慰,使我在学业上更努力,生活上更安定,精神 上更坚强。 最后,还要感谢我的父母及所有关心、鼓励和帮助过我的老师、同学和朋友们! i l l 作者:许强 2 0 0 5 年5 月 第一章绪论 消息中间件( m e s s a g e o r i e n t e dm i d d l e w a r e ,m o m ) 是中间件( m i d d l e w a r e ) 技术的一一个重要分支,它提供了一种在网络计算环境中的异步、低耦合的编程 架构。通过有效屏蔽了网络协议、编程语言、操作系统和数据库的细节,消息 中问件在不同应用系统之间提供了可靠的异步通讯和消息交换,进而实现了分 布式网络计算环境中的企业应用整合。 11 中间件技术 中间件技术最早产生于2 0 世纪8 0 年代末,当时是用于为分布式应用开发 提供一个结构良好的软件平台 1 。 图1 1 中阔件模型 中间件位于分布式应用与操作系统( 包括基本的通讯协议) 之间,如图1 1 所示,屏蔽了底层操作系统、网络以及数据库的异构性和复杂性。同操作系统 提供的应用程序接1 3 ( a p p l i c a t i o np r o g r a m m i n gi n t e r f a c e ,a p i ) 相比,中间件 为应用开发者提供了更高级的开发接口,简化了网络分布应用的开发、管理和 维护,方便了分布式软件模块之间的交互 j ,2 。同时作为基础平台,中间件还 提供了服务质量( q u a l i t yo fs e r v i c e ,q o s ) 管理和信息安全等底层服务。因此 从产生之日起到现在,中问件技术取得了长足的发展,得到了工业界和学术界 的青睐,已成为分布式系统的主流技术之一8 1 。 1 1 1 远程过程调用中间件( r e m o t ep r o c e d u r ec a l i r p c ) 它扩展了过程调用接口技术,可以通过网络直接调用一个远程子系统,或 者调用一个远程对象的远程方法。r p c 中问件一般采用同步方式,不支持多线 程技术,因此也不支持并发运算。 1 1 2 面向消息的中间件( m e s s a g e o r i e n t e dm i d d l e w a r e m o m ) 它通过网络提供了一个抽象的消息对列( m e s s a g eq u e u e ) ,消息中间件一 般具备很好的伸缩性,并提供了多种拓扑结构。同时m o m 产品也提供了消息 持久化、消息备份和实时处理等机制。 1 1 3 分布式对象中间件( d ;s t r i b u t e do b j e c t m ;d d i e w e r e d o m ) 它提供了物理上分布在各处的对象实体通过网络进行交互的机制。d o m 体 系使得软件开发者可以全面利用面向对象技术中的各种优点,包括继承、封装 和多态等。 分布式对象中间件有两个著名的代表:公共对象请求代理体系( c o m m o n 0 b j e c tr e q u e s tb r o k e ra r c h i t e c t u r e ,c o r b a ) 和分布式组件对象模型( d i s t r i b u t e d c o m p o n e n to b j e c tm o d e l ,d c o m ) 。 c o r b a 是由对象管理组织( o b j e c tm a n a g e m e n tg r o u p ,o m g ) 开发并管理, 它利用软总线技术实现了分布式对象之间的交互。c o r b a 是目前中间件技术 中唯一的国际标准,因此也是真正的跨平台、跨语言的中间件。 d c o m 由微软公司开发。它包括了一系列的微软开发技术,如对象嵌入与 连接( o l e ) 、组件对象模型( c o m ) 、事务和动态目录等。d c o m 提供了语言 无关性的应用系统集成机制,但它只能运行在微软的操作系统之上。 1 1 4w e b 应用服务器( w e ba p p i c a t i o rs er y e r w a s ) w e b 应用服务器是近年来伴随着i n t e r n e t 技术而发展起来的一种新型的中 间件,它面向w e b 计算模式下的分布式应用系统的开发。w e b 应用服务器综合 采用了多种的中间件技术,包括远程过程调用、消息和分布式对象。w a s 采用 多层体系结构,保证了其上所开发的应用系统的稳定性和扩展性。 w e b 应用服务器中较突出者主要有两大类:j 2 e e ( j a v a2p l a t f o r me n t e r p r i s e e d i t i o n ) 和微软n e t 。 j 2 e e 由s u n 公司提出,它为事务性w e b 应用的开发、部署、运行和管理 提供一系列的规范和标准,其中也包括本次论文所遵循的j m s 规范。这些j 2 e e 规范为应用服务器的实现提供了一个完整的底层框架和一套标准的规范,保证 了在不同的j 2 e e 应用服务器之上的应用组件之间的互操作性和移植性。 微软n e t 构建在w i n d o w s d n a 技术基础上,在n e t 中提供了一系列企业 级应用服务,为部署、管理和建立基于x m l 和w e b 的应用构筑了n e t 服务器 结构,它们结合w i n d o w s 平台上的一系列丌发工具和技术提供了强有力的应用 服务器解决方案。 虽然目前j 2 e e 和n e t 势均力敌,但是j 2 e e 作为一种规范,具有n e t 无 法比拟的跨平台、企业应用集成能力以及可扩展性和开放性,得到了许多厂商 的支持( 目前已有超过4 0 种的j 2 e e 应用服务器产品) ,并己逐步被广大研发 人员和企业所接受,有良好的前景,逐渐成为w e b 应用服务器研究和开发的主 流。 1 2 消息中间件 消息中间件是中间件的一个重要分支,它为分布式应用系统的开发提供了 一个异步、低耦合的编程架构。消息中间件的思想非常类似于目前广泛使用的 电子邮件系统,如果说电子邮件系统实现了人与人之问的消息传递,那么消息 中间件则实现了系统与系统之间的消息传递 3 】。 图1 - 2消息中间件的拓扑结构 消息中间件在分布式应用系统的开发中扮演了一个“中间人”的角色,如 图1 2 所示。它使用一个披称之为“d e s t i n a t i o n ”的对象来完成消息的收发和 存储。消息发送者向指定的d e s t i n a t i o n 发送消息,消息接收者( 可能有多个) 从指定的d e s t i n a t i o n 中接收消息。d e s t i n a t i o n 可以在消息接收者暂时不可用时 完成对消息的持久化存储。在有些消息中间件产品中,d e s t i n a t i o n 还可以完成 消息答复功能。 图1 - 3r p c 中间件的拓扑结构 消息中间件采用星型的拓扑结构,这种结构可以保证当分布式系统范围扩 大时,整个系统的复杂性不会有明显的增加,这也是它优于远程过程调用中间 件的一个方面【9 】。r p c 中间件的拓扑结构如图1 3 所示。 同r p c 中间件的同步紧耦合的编程架构不同,消息中间件提供了异步的消 息通讯方式。当一条消息发送时,它并不是直接发送给消息接受者,而是通过 网络路由到指定的d e s t i n a t i o n ,已经注册到该d e s t i n a t i o n 的应用系统可以作为 接收者接收该消息。可以看出,通过d e s t i n a t i o n 将消息的发送者和接收者进行 了隔离,消息接收者不需要等待消息发送者的操作,这种异步方式大大降低了 系统之间的耦合度。 在q o s 方面,消息中间件产品一般都提供了容错性、负载平衡、可度量性 和事务性等方面的支持。 目前消息中间的产品和规范各不相同,它们采用不同的消息格式和通讯哳 议完成消息的交换。但是它们的基本语义是相同的,总是提供一组相同或类似 的a p i 用于完成消息创建、加载数据、加载路由信息( 指定d e s t i n a t i o n ) 、发 送消息和接受消息的操作【4 】。 1 3 企业应用整合 今天,几乎所有的大企业都面临着一个信息化难题:在企业内部和企业之 间需要整合大量的应用系统和数据源,实现企业范围内的互操作和数据共享。 这被称之为企业应用整合( e n t e r p r i s ea p p l i c a t i o ni n t e g r a t i o n ,e a i ) 。这些应用 系统可能有十几个,甚至几十个,它们访问的数据源包括关系数据库、外部信 息提供者和互联网等。这些大量异构的数据源和应用系统使得整合 作变得异 4 常复杂。 原有的整合方式多采用远程过程调用技术来实现。通过r p c ,个系统可 以调用另外一个远程子系统,或者调用一个远程对象的远程方法,从而实现跨 系统的数据整合以及功能协作。但远程过程调用技术的自身特点决定了这种整 合是同步紧耦合的,丽分布式应用中的一个重要需求就是操作的事务性。例如 一个在线电子商务包括了提交订单、价格计算、在线支付、配送等多个步骤, 涉及客户、银行、产品供应商和配送公司多个单位和个人,这些操作要求要么 全部成功、要么仝部失败。显然同步紧耦合的r p c 系统会为这种分布式事务处 理带来障碍。 随着分布式应用范围的不断扩大,基于异步低耦合的编程架构已经逐渐成 为分布式应用开发的主流。虽然目前出现了很多不同的e a i 解决方案,但消息 中间件始终是这些不同方案中相同的核心部分。通过消息中间件,不同的应用 系统可以通过网络通讯交换数据和事件,在交换的过程中这些数据和事件被封 装成消息进行传输。因此近年来消息中间件被广泛地应用于e a i 领域。 1 4 本文主要研究内容 在j m s 规范的框架内,设计并实现一个完整的消息中间件产品:m y j m s , 建立出版订阅和点到点的消息交换模式,实现六类标准的j m s 消息,实现所 有的j m s 标准a p i ,实现持久化消息交换,实现消息的预浏览和选择,实现消 息的同步接收和异步接收。 全面深入地研究基于j a v a 的服务器端编程技术,为解决网络环境中的并发 计算和提高产品的服务质量,建立包括r m i 底层通讯、j n d l 名字服务、数据 库的垃圾清理、事件监听和多线程并发管理在内的基础服务。 在己实现产品的基础上提出j 种基于消息中间件的应用系统集成方案,通 过m y j m s 为分布在网络上的不同系统提供了可靠的异步通讯和消息交换,完成 应用集成并给出了具体的程序范例。 第二章j m s 规范 j a v am e s s a g es e r v i c e ( j m s ) 是由s u nm i c r o s y s t e m s 公司提出的基于j a v a 技术的消息中间件的规范。它有效地屏蔽了网络协议、应用实现的具体技术、 操作系统和数据库的细节,目前已被各大软件公司和开源组织所接受,成为r j f 业界的事实标准。 2 1j m s 定义 j m s 用于创建消息中间件的一组应用开发接h ( a p i ) 。j m s 本身并不是一 个消息中间件它只是为中间件生产商( 或者叫提供者,p r o v i d e r ) 制定了一系 列的接口规范和类抽象,以便使任何遵守此规范的提供者可以生成、发送、接 收和阅读消息,并实现彼此之间的消息交换,使应用系统获得最大的可移植性 f 7 1 。j m s 的应用架构如图2 1 所示。 图2 - 1j m s 应用架构 在这一点上,j m s 类似于j d b c ( j a v ad a t a b a s ec o n n e c t i o n ) 和j n d i ( j a v a n a m i n ga n dd i r e c t o r y ) 。j d b c 实现了访问关系数据库的抽象,j n d i 实现了访 问命名和目录服务的抽象,j m s 实现了访问消息中间件的抽象。 因此我们可以给出j m s 的定义:j m s 是一个规范,它定义了一组接口和相 关的语义,这些接口允许基于j a v a 技术开发的应用程序访问任何一个遵守j m s 规范的消息中间件产品。 这个定义、浣明了: j m s 只是一种规范,并不是产品的具体实现; j m s 只定义了接口和语义; j m s 适用于任何一种遵守该规范的消息中间件产品,即可移植性; 6 j m s 只适用于采用j a v a 技术开发的应用系统,即语言相关性。 需要指出,j m s 规范并非由s u n 公司一“家开发并完成。在j m s 规范指定 和开发的过程中,很多业界的领导厂商参与了这一过程,包括i b m 、o r a c l e 、 s y b a s e 、n o v e l l 、a l l a i r e 、b e as y s t e m s 、f i o r a n os o f t w a r e 、p r o g r e s ss o f t w a r e 等 5 ,2 5 ,2 6 ,3 5 3 6 ,3 7 ,3 8 ,3 9 ,4 0 ,4 1 ,4 2 ,4 3 。这正是j m s 规范被j 。泛接收,并 成为当前消息中间件的事实标准的重要原因。 同时,j m s 规范并没有强制要求所有的中间件厂商必须全部实现规范中的 所有内容。j m s 规范中有很多是可选内容,这些内容可以由提供者自行决定是 否实现。 2 2j m s 的消息模式 j m s 提供了两种消息交换模式:点到点( p o i n t t o p o i n t ) 和出版订阅 ( p u b l i s h s u b s c r i b e ) 。 首先给出几个定义: ( 1 ) 消息目的地( d e s t i n a t i o n ) :用来接收、存储和转发消息存储区,在点 到点模式中称之为“队列”( q u e u e ) ,在出版订阅模式中称之为“主题”( t o p i c ) : ( 2 ) 消息制造者( p r o d u c e r ) :产生并发送消息的应用系统。在点到点模式 中称之为“发送者”( s e n d e r ) ,在出版订阅模式中称之为“发布者”( p u b l i s h e r ) : ( 3 ) 消息消费者( c o n s u m e r ) :接收消息的应用系统,在点到点模式中称之 为“接收者”( r e c e i v e r ) ,在出版订阅模式中称之为“订阅者”( s u b s c r i b e r ) 。 2 2 1 点到点模式 点到点模式实现了一对一的消息交换。它允许消息生产者和消息消费者采 用同步( s y n c h r o n o u s l y ) 或异步( a s y n c h r o n o u s l y ) 的方式进行消息交换。在同 步方式下,消费者通过“拉”( p u l l ) 的方式接收消息;在异步方式下,消息队 列通过“推”( p u s h ) 的方式让消费者接收消息。 作为消息目的地的q u e u e 遵守先进先出( f i f o ) 规则,队列把消息按照发 送的顺序保存在队列中,并按顺序发送给消息接收者。所有消息都被发送到一 个特定的队列,它们在这里保持到用尽了自己的时间限制或由接收者处理。发 送者并不需要知道接收者。接收者也不需要知道这个消息是在何处产生的。发 送者和接收者可以在运行时动态地增加到消息队列中。( 这也是消息中间件的一 个共同的特点) 。 在点到点的消息传送时,每条消息有一个消费者。个对列可能会附带有 多个消费者,但有且只有一个消费者将消费一个具体的消息。多个制造者可以 向相同的队列发送消息。 发送和接收消息与时间没有关系。制造者可以在任何时间发送一条消息: 对列中的消息接着可以在其时间限制用尽之前的任何时间被消费掉。为了让双 方可以工作,唯一需要运行的就是消息队列,j m s 客户( 制造者和消费者) 不 需要同时运行。 消费者必须确认对消息的接收( a c k n o w l e d g er e c e i p t ) 。这既可以是在应用 程序中隐藏处理并自动完成,也可以采用手工进行后期处理,或者作为一项事 务的一部分来完成。消费者确认了次接收以后,桐应的消息就会被从队列中 删除。 图2 2 鼹示了发送者和接收者之间通过消息对列发送、接收消息的全过程: 垦sender ( ) 图2 2 点到点消息交换模式 j m s 提供了消息预览功能,它是通过队列浏览器对象( q u e u eb r o w s e r ) 实 现的。浏览器允许消费者察看消息的内容,但并不真正地接受消息,因此预览 的消息不会被从队列中删除。这就为消息消费者提供了消息选择的空间。 有了一个消息队列,我们就可以使用多个消费者从队列中接收消息。通过 将消费者分布在不同的计算机上,我们可以实现一种简单形式的负载平衡。这 种负载平衡不是位于j m s 级,而是通过使用j m s 在应用程序级进行负载平衡。 每条消息都将被一个消费者( 并且只有一个) 消费。如果该消费者正在忙着处 理一条消息,则另一个消费者将取得下一条消息,从而在不同的计算机之间分 散处理负静。 2 2 2 出版订阅模式 出版订阅模式实现了一对多的消息交换。它允许消息生产者和消息消费者 采用异步方式进行消息交换,消息队列通过“推”( p u s h ) 的方式让每个消费者 接收消息的一个拷贝。 作为消息目的地的消息主题( t o p i c ) 和消息队列相似,同样遵守先进先出 ( f i f o ) 规则。多个制造者可以向一个主题发布消息,主题将保持着消息直到 把它们发送到消费者。消息主题允许匿名的消息订阅者。 在出版订阅模式中,每条消息可以有多个( 0 个、1 个或者多个) 消费者。 每个消费者获得消息的一个拷贝。 订阅者只能消费它们订阅之后出版的消息,这种与时间的相关性和采用点 到点模式发送的消息不同。如果在上述情况下,制造者出版一条消息时,订阅 者1 和2 则都将接收到此消息。如果新来了一个消费者又订阅了相同的主题, 它将无法接收到前面的消息。 图2 3 显示了发送者和接收者之间通过消息主题发送、接收消息的令过程 埕i 玎,n 图2 - 3 出版订阅消息交换模式 订阅者必须保持为活动状态才。能时用这些消息。对此的一个例外情况时使 用持久化( d u r a b l e ) 订阅。 消息制造者可以通过临时主题( t e m p o r a r yt o p i c ) 动态地创建消息主题。 临时主题和制造者的客户端连接对象( c o n n e c t i o n ) 绑定在一起,其生命期由 连接对象的生命期决定,因而不支持消息的持久化。 j m s 支持消息持久化( p e r s i s t e n c e ) 机制。当一个持久化订阅者的连接断 开时,服务器负责存储该订阅者订阅的所有消息,并在连接恢复时发送给订阅 者。 通过使用订阅者的接收方法( r e c e i v e ( ) ) 或主题请求者对象 ( t o p i c r e q u e s t o r ) ,可以在出版订阅模式中建立请求,应答的同步会话模式。 j m s 提供“退订”( u n s u b s c r i b e ) 功能。对于非持久化订 阅者,当连接断开时,系统自动完成退订;而对于持久化订阅 者,必须显式调用退订方法( t o p i c s e s s i o n u n s c r i b e 0 ) 才能完 成退订的功能。 2 3j m s 的消息结构 消息是j m s 规范中最为重要的部分之一,在j m s 应用系 统中,所有的数据和事件都是以消息的方式进行通讯。 一个m s 消息由三部分组成:消息头、消息属性( 可选) 、 消息体,如图2 - 4 所示。 消息头( h e a d e r ) 包含了描述消息的元数据以及必要的控 制信息,例如客户应答方式、消息目的地等。 消息属性( p r o p e r t i e s ) 是对消息头的补充,消息消费者 可以利用消息选择器( s e l e c t o r ) 完成对特定属性的消息的过 滤。 消息体( p a y l o a d ) 包含了消息中的数据和事件的内容, 9 消惑:虫 i 纳地 之挺糖 i b l i 1 i 】谶 垃j | :i j ,;_ n 键送 扼竞救 触泞 剃琏f f 锕“受诬 潲崩弑忭 i j 恐体 善 消息类型决定了消息体中数据的结构和组织。 2 3 1 消息头 j m s 规定的消息头包括: 呤j m s d e s t i n a t i o n :消息目的地,它指向一个t o p i c 或 q u e u e 对象: 夺j m s d e l i v e r y m o d e :消息传输方式,有两种:持久化和非持久化。持久 化方式中,如果j m s 服务器当机,消息也不会丢失;非持久化则不能保证; 夺j m s m e s s a g e l d :消息i d ,唯一标识本条消息的个字符串; 令j m s t i m e s t a m p :消息时问戳,发送消息的准确时间( 精确到毫秒) ; 夺j m s e x p i r a t i o n :消息的过期时间。精确到毫秒,0 表时永不过期; 4 - j m s r e d e l i v e r e d :标志本条消息是否为重新发送; 4 - j m s p r i o r i t y :消息的优先级,o 一4 为普通优先级,5 9 为高优先级: 夺j m s r e p l y t o ;消息的回复地址,指向一个d e s t i n a t i o n 对象; 夺j m s c o r r e l a t i o n l d :消息的相关消息i d ,通常用于答复消息指向源消息: 夺j m s t y p c :消息类型,决定消息的结构和消息体的类型。 2 3 2 消息属性 消息属性是一个“名一值对”,有三类消息属性:应用程序指定属性 ( a p p l i c a t i o n - s p e c i f i c ) 、j m s 定义属性( j m s - d e f i n e ) 和提供者指定属性 ( p r o v i d e r s p e c i f i c ) 。其中j m s 定义属性包括: 夺j m s x u s e r l d :消息发送者的客户i d ; 4 - j m s x a p p i d :消息发送的应用系统的i d ; 夺j m s p r o d u c e r t x i d :制造消息操作所在的事务的i d ; 夺j m s c o n s u m e r t x i d :消费消息操作所在的事务的i d ; 夺j m s x r c v t i m e s t a m p :消息被接收时的u t c 时间: 夺j m s x d e l i v e r y c o u n t :一条消息被重复发送的次数; 夺j m s x s t a t e 消息状态,1 表示等待,2 表示准备,3 表示过期,4 表示 保持。 关于其他两类属性不在j m s 规范的要求之内,可以由应用程序开发者和中 间件生产商自行决定。 2 3 3 消息选择器 消息选择器( s e l e c t o r ) 允许消息消费者有选择地接受消息。选择器创建 个条件表达式,检查消息头和消息属性的内容,只接收符合条件表达式的消息。 条件表达式的语法是s q l 一9 2 标准的一个子集,对应w h e r e 字句。例如 我们可以通过”u s e r n a m ei - t o m 来接收除t o m 外的所有人的消息。 2 3 4 消怠体 j m s 定义了6 类消息:m e s s a g e 、t e x t m e s s a g e 、s t r e a m m e s s a g e 、m a p m e s s a g e 、 o b j e c t m e s s a g e 、b y t e s m e s s a g e ,每一类消息装载不同格式的消息体数据。 夺m e s s a g e :最简单的消息,它是其他5 类消息的超类。m e s s a g e 不带任何 消息体; 夺t e x t m e s s a g e :文本消息,装载字符串类型的消息体; 4 - s t r e a m m e s s a g e :流消息,装载的消息体是由j a v a 原始类型( i n t ,d o u b l e , c h a r 等) 组成的流对象; 4 - m a p m e s s a g e :映射消息,装载的消息体是一组名一值对; 夺o b j e c t m e s s a g e :对象消息,装载可串行化的j a v a 对象的消息体; 夺b y t e s m e s s a g e :字节流消息。装载字节数组类型的消息体; 2 4j m s p l j m s 规范除了规定了消息中问件的语义和模式,其主要部分是由一组定义 良好的接口( a p i ) 来体现的。所有的j m s 提供者必须实现这些接口,或者说 提供者的主要工作就是给出这些接口的实现。j m sa p i 都是随j a v a x j m s 包一起 发行。 按照a p i 的性质,可以分为三类:控制类、消息类和异常类,下面分别介 绍所有接口的作用以及它们之间的关系。 2 4 1j m s 控制a p i j m s 控制a p i 如图2 5 所示: 夺c o n n e c t i o n :一个客户对其j m s 提供者的活动连接; c o n n e c t i o n f a c t o r y :封装由系统管理员定义的一组连接配置参数,它是 c o n n e c t i o n 对象的工厂类: 专c o n n e c t i o n m e t a d a t a :提供说明c o n n e c t i o n 对象的相关信息; 夺d e l i v e r y m o d e 发送由j m s 支持的模式,很可能是简单的p e r s i s t e n t 而不是n o np e r s i s t e n t 。发送模式只覆盖消息到其目的地的传输; 夺e x c e p t i o n “s t e n e r :如果一个j m s 提供者检测到一个c o n n e c t i o n 出现了 一个严重的问题,并且已经注册了一个e x c e p t i o n l j s t e n e r ,它将通知这个 c o n n e c t i o n 的e x c e p t i o n “s t e n e r ; 夺m e s s a g e c o n s u m e r :一个客户使用一个消息消费者从一个d e s t i n a t i o n 接收消息。一个消息消费者会进行同步处理; 夺m e s s a g e l j s t e n e r :用于接收异步发送的消息,这个接口只定义了一个方 法 图2 - 5j m s 控制a p l 夺m e s s a g p r o d u c e r :一个客户使用一个消息制造者向一个d e s t i n a t i o n 发送 消息; 奄q u e u e c o n n e c t i o n :对一个j m s 点到点提供者的一条活动连接,它是 c o n n e c t i o n 的子类; 夺q u e u e c o n n e c t i o n f a c t o r y :q u e u e c o n n e c t i o n 的工厂类,一个客户使用 个q u e u e c o n n e c t i o n f a c t o r y 来生成具有j m s p t p 提供者的q u e u e c o n n e c t i o n ; 夺q u e u e r e c e i v e r :一个客户使用一个q u e u e r e c e i v e r 来接收已经发送到 个队列的消息;。 夺q u e u e s e n d e r :一个客户使用一个q u e u e s e n d e r 向一个队列发送消息: 夺q u e u e s e s s i o n :一个客户到一个j m s p t p 提供者的会话,用来生成 q u e u e r e c e i v e i ,q u e u e s e n d e r q u e u e b r o w s e r ,t e m p o r a r y q u e u e 对象a 它是s e s s i o n 的子类。 夺s e s s i o n :会话,它是一个单线程的上下文环境,用于制造和消费信息; 夺t o p i c c o r m e c t i o n :对一个j m sp u b s u b 提供者的一条活动连接; 夺t o p i c c o n n e c t i o n f a e t o r y :t o p i c c o n n e c t i o n 的工厂类,一个客户使用一 个t o p i c c o n n e c t i o n f a c t o r y 来生成具有j m sp u b s u b 提供者的t o p i e c o n n e c t i o n ; 夺t o p i c p u b l i s h e r 一个客户使用一个t o p i e p u b l i s h e r 向一个主题出版消 息; t o d i c s e s s i o n :一个客户到一个j m sp u b s u b 提供者的会话,用来生成 t o p i c p u b l i s h e r t o p i c s u b s e r i b e r ,t e m p o r a r y t o p i c 对象。它是s e s s i o n 的子类; 夺t o p i c s u b s c r i b e r :一个客户使用一个t o p i c s u b s c r i b e r 来接收已经出版到 一个主题的消息。 2 4 2j m s 消息a p i j m s 消息a p i 如图2 - 6 所示 图2 - 6j m s 消息a p i 夺b y t e s m e s s a g e :用于发送一条包含一个未解释的字符流的消息; 夺d e s t i n a t i o n :因为j m s 并不定义一个标准的地址语法,因此这个接口 用于封装提供者专用的地址。尽管人们可以考虑采用标准的地址语法,但不同 m o m 产品之间的地址在语法上的差别太大,以至于无法用一种语法作为沟通 它们的桥梁; 夺m a p m e s s a g e :用于发送一组名字一值对,其中名字是字符串,值是j a v a 原子类型的数据。这种名字一值对可以根据枚举器或者由名字来按顺序访问: 夺m e s s a g e :所有j m s 消息的根接口; 夺o b j e c t m e s s a g e :用于发送一条包含一个可串行化j a v a 对象的消息。如 果需要一个j a v a 对象的集合,我们可毗使用一个j a v a 集合类; 夺q u e u e :封装一个提供者专用的队列名: 夺q u e u e b r o w s e r 一个客户使用一个q u e u e b r o w s e r 来察看一个队列上的 消息,而不会移动它们: 4 - s t r e a m m e s s a g e :用于发送一个j a v a 原子类型的数据流; 夺t e m p o r a r y q u e u e :为一个q u e u e c o n n e c t i o n 的持久性而生成的唯一的 q u e u e 对象: 夺t e m p o r a r y t o p i c :为一个t o p i c c o n n e c t i o n 的持久性而生成的唯一的 t o p i c 对象; 夺t e x t m e s s a g e :用于发送一条包含s t r i n g 的消息: 夺t o p i c :封装一个提供者专用的主题名; 匡蛩蛰蓬国西甲占 一。 卣蠡匡耋 銎 2 4 3j m s 异常a p i j m s 异常a p i 如图2 7 所示: 图2 7j m s 异常a p i j m s e x c e p t i o n :当j m s 操作发生错误时抛出的异常,它包含描述错误 原因的错误码。它有很多子类用来描述具体的错误,包括 1 1 l e g a l s t a t e e x c e p t i o n ,l n v a l i d c l i e n t i d e x c e p t i o n ,i n v a l i d d e s t i n a t i o n e x c e p t i o n ,l n v a l i d s e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025电子产品买卖合同范本汇编
- 2025年吉林省农村义务教育阶段学校教师特设岗位计划合同签订仪式举行
- 服装公司生产合同范本
- 空调系统合同范本
- 水稻品种终止合同范本
- 2025鞋类品牌加盟合同
- 劳务派遣合同范本个人
- 材料采购欠款合同范本
- 渣土车辆购买合同范本
- 地产保险合同范本
- 2025年秋招:新媒体运营笔试题目及答案
- 工作总结及工作思路(输电运维班)
- 感染性休克的护理诊断与措施
- Unit 14 I remember meeting all of you in Grade 7(大单元教材分析)教学课件 人教新目标九年级英语全册
- 肺炎护理试题填空及答案
- 食材配送 售后服务方案
- 安全操作规程修订要求
- 2025年四川绵阳燃气集团有限公司招聘考试笔试试题(含答案)
- 2025至2030盾构机行业市场深度研究与战略咨询分析报告
- 2022年咸阳经开城市发展集团有限公司招聘笔试试题及答案解析
- 不等式的基本性质说课课件
评论
0/150
提交评论