(计算机应用技术专业论文)消息代理中间件技术的研究与设计.pdf_第1页
(计算机应用技术专业论文)消息代理中间件技术的研究与设计.pdf_第2页
(计算机应用技术专业论文)消息代理中间件技术的研究与设计.pdf_第3页
(计算机应用技术专业论文)消息代理中间件技术的研究与设计.pdf_第4页
(计算机应用技术专业论文)消息代理中间件技术的研究与设计.pdf_第5页
已阅读5页,还剩62页未读 继续免费阅读

(计算机应用技术专业论文)消息代理中间件技术的研究与设计.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

消息代理中间件技术的研究与设计摘要 摘要 随着i n t e r n e t 技术的迅速发展和企业对信息化的不断要求,使 得企业间或企业内部应用系统之间的信息交流和共享越来越频繁,因 此对这些系统进行整合势在必行。消息代理中间件提供了一个方便 的、高效的应用系统整合方案。 消息代理中间件在消息队列中间件可靠数据传输的基础上,提供 了应用集成所需的数据转换、路由和收集等功能,使分布式应用之间 的通信更加简单、高效。它像一个软件的h u b ,连接需要交互的各个 应用系统,不仅减少了应用系统接口的数量、相互的技术依赖性,而 且能够适应数据处理逻辑、应用系统结构的变化,最大程度地保护了 对已有应用的投资。 本文首先剖析了消息队列中间件的工作原理,作为消息代理中间 件数据传输部分的理论基础。然后通过分析应用集成的步骤,设计了 一个对消息进行集中处理的方案,并详细阐述了其中涉及到的消息处 理技术。然后根据该方案设计了一个消息代理中间件的简化版本一消 息集成代理( m i b ) ,并实现了它的核心组件一消息流引擎。最后对 m i b 的设计和实现进行了总结,提出了今后需要研究和改进的方向。 关键词:消息代理中间件,消息流,解析器,消息流引擎 作者:郁洪波 指导老师:孙涌 a b s t r a c t 消息代理中间件技术的研究与设计 a b s t r a c t w i t ht h er a p i dd e v e l o p m e n to ft h ei n t e r n e ta n dt h eg r o w i n g r e q u i r e m e n to f i n f o r m a t i o n l i s a t i o ni ne n t e r p r i s e s t h ei n f o r m a t i o ne x c h a n g ea n d s h a r i n gb e t w e e n a p p l i c a t i o ns y s t e m s w i t h i na n d a m o n g b e c o m em o r e f r e q u e n t l y t h ei n t e g r a t i o n o ft h e s es y s t e m sb e c o m e s h i g h l yp r a c t i c a la n dn e c e s s a r y t h em b ( m e s s a g e b r o k e r m i d d l e w a r e ) c a np r o v i d ew i t hu sac o n v e n i e n ta n de f f i c i e n ti n t e g r a t i o ns c h e m e b a s e do nt h er e l i a b l em e s s a g e t r a n s f e r r i n gm e c h a n i s mo fm q m ( m e s s a g e q u e u em i d d l e w a r e ) ,m bp r o v i d e st h r e ef u n c t i o n sr e q u i r e db ya p p l i c a t i o n i n t e g r a t i o n :m e s s a g et r a n s f o r m i n gf u n c t i o n ,m e s s a g er o u t i n g f u n c t i o na n d m e s s a g e c o l l e c t i n gf u n c t i o n ,w h i c he f f i c i e n t l ys i m p l i f i e st h ec o m m u n i c a t i o n b e t w e e n d i s t r i b u t e d 印p l i c a t i o n s l i k eas o f t w a r eh u b ,m bf u n c t i o n sb y c o n n e c t i n ge a c ha p p l i c a t i o ns y s t e mt h a t r e q u i r e si n t e r o p e r a t i o n ;h e n c e i tr e d u c e st h en u m b e r o f a p p l i c a t i o ns y s t e mi n t e r f a c e s a n dt h e i rm u t u a lt e c h n i c a ld e p e n d e n c yo nt h eo n eh a n d ,a n di tc a na l s oa d a p tt ot h e c h a n g e si nt h ep r o c e s s i n gl o g i ca n da p p l i c a t i o ns y s t e m sa r c h i t e c t u r eo n t h eo t h e r h a n d a sar e s u l t ,t h ei n v e s t m e n ti nt h ee x i s t i n ga p p l i c a t i o n sc a nb ep r o t e c t e dt ot h e u t m o s t t h e p a p e r s t a r t sw i t ha ne x p l i c a t i o no f t h e w o r k i n g m e c h a n i s m o f m q m t h a t l a y st h et h e o r e t i c a lf o u n d a t i o n f o rm b a f t e r a n a l y z i n g t h ec u r r e n t p r o c e d u r e so f t h ea p p l i e d i n t e g r a t i o n ,i tp r o c e e d s t o p r o p o s e ac e n t r a l i z e dm e s s a g e p r o c e s s i n gs c h e m ea n de x p o u n d t h em e s s a g e p r o c e s s i n gt e c h n i q u e sc o n c e r n e d t h e no nt h eb a s i so f t h i ss c h e m e ,i td e s i g n e da s i m p l i f i e dv e r s i o no f m b ,w h i c h i sn a m e dm i b ( m e s s a g ei n t e g r a t i n gb r o k e r ) a n d e q u a l l yi m p o r t a n t ,r e a l i z e dt h e c e n t r a lm o d u l eo f m i b - - - m e s s a g e f l o w e n g i n e 、i n t h ec o n c l u d i n g p a r t ,t h ep a p e rs u m m a r i z e st h ed e s i g na n dr e a l i z a t i o no fm i b a n ds u g g e s t e dt h ef u t u r ei m p r o v e m e n to ni t k e yw o r d s :m e s s a g eb r o k e r , m e s s a g ef l o w , p a r s e r , m e s s a g ef l o we n g i n e h w r i t t e nb yy uh o n g b o s u p e r v i s e db ys u ny o n g y 6 4 5 7 4 2 苏州大学学位论文独创性声明及使用授权的声明 学位论文独创性声明 本人郑重声明:所提交的学位论文是本人在导师的指导下,独立 进行研究工作所取得的成果。除文中已经注明引用的内容外,本论文 不含其他个人或集体已经发表或撰写过的研究成果,也不含为获得苏 州大学或其它教育机构的学位证书而使用过的材料。对本文的研究作 出重要贡献的个人和集体,均已在文中以明确方式标明。本人承担本 声明的法律责任。 研究生签名:强2 邀遽日期:2 竺垫:竖 学位论文使用授权声明 苏州大学、中国科学技术信息研究所、国家图书馆、清华大学论 文合作部、中国社科院文献信息情报中心有权保留本人所送交学位论 文的复印件和电子文档,可以采用影印、缩印或其他复制手段保存论 文。本人电子文档的内容和纸质论文的内容相一致。除在保密期内的 保密论文外,允许论文被查阅和借阅,可以公布( 包括刊登) 论文的 全部或部分内容。论文的公布( 包括刊登) 授权苏州大学学位办办理。 研究生签名: 导师签名: 日期:至业:垣 日期:础旺 消息代理中间件技术的研究与设计 1 1 消息中间件概述 第一章绪论 消息中间件( m o m ,m e s s a g eo r i e n t e dm i d d l e w a r e ) 是一种利用 高效可靠的消息传递机制进行与平台无关的数据通信,并基于数据通 信来进行分布式系统集成的软件。通过提供消息传递( m e s s a g e p a s s i n g ) 模型和消息排队( m e s s a g eq u e u i n g ) 模型,消息中间件可以 在分布式环境下扩展进程间的通信,并支持多种通讯协议,多种软、 硬件平台。 大多数商业m o m 产品都使用消息队列作为其实现形式,所以也可 称之为消息队列中间件( m q m ,m e s s a g eq u e u em i d d l e w a r e ) ,如i b m 公司的w e b s p h e r em q 、b e a 公司的m e s s a g e q 和国内东方通公司的 t o n g l i n k q 。m q m 和m o m 之间的关系是:m q m 是m o m 的一种,m o m 包 含m q m 。 1 1 1 消患队列中间件概述 1 消息队列中间件的定义 消息队列中间件是一种通过使用驻留在内存或硬盘上的队列作 为消息缓冲,提供分布式应用间可靠信息交换的机制。消息队列中 间件中最重要的是消息队列服务,该服务管理所有与队列相关的操 作,如队列的创建、启动、停止和存取等。 2 消息队列中间件的优点 在使用m q m 的系统中,消息队列作为应用之间的中转站,每个应 用只需和消息队列打交道,而不用考虑对方是否连接、使用什么通讯 协议、运行在哪种操作系统平台等细节问题。图卜l 显示了应用程序 与消息队列中间件的通讯图。源应用只需将消息放到队列中,目标应 用在需要的时候从队列中取走消息,从而达到相互通信的目的。这两 个应用可以在同一台机器上,也可以在存在网络连接的不同机器上; 可以使用同步通信模式,也可以使用异步通信模式;可以按消息进入 队列的先后顺序提取,也可以按消息的优先级提取。 消息代理中间件技术的研究与设计 图卜1 消息队列中间件的通讯模型 消息队列中间件有以下优点: 1 ) 应用程序可在不同的时间运行 应用程序不直接通信,而是间接地将消息放入消息 队列。因为应用程序间没有直接的联系,所以它们不必 同时运行。源应用程序将消息放入队列时,目标应用程 序有可能还未开始运行:即使目标应用程序正在运行, 也不意味着目标应用程序必须立即处理该消息。 2 ) 对应用程序的结构没有约束 在复杂的应用场合中,需要通信的应用程序之间不 仅可以是一对一的关系,还可以是一对多或多对一的关 系,甚至是上述多种方式的组合。多种通讯方式的构造 并不增加应用程序的复杂性。 3 ) 应用程序与网络复杂性相隔离 应用程序只需调用m q m 提供的a p i 函数完成将消息 放入消息队列或从消息队列中取出消息的操作,其余的 与此关联的全部活动,比如维护消息队列、维护应用程 序和队列之间的关系、处理网络的重新启动和在网络中 移动消息等任务都由m q m 来负责处理。应用程序只与m q m 通信,因此它们不涉及网络通讯的复杂性。 4 ) 网络资源占用量小 单个计算机系统中的多个应用程序可以共享m q m 的 消息传输通道,减少了建立网络连接的次数。 5 ) 保证消息的可靠传输 消息队列中间件通过跟踪事务、将事务和消息内容 消息代理中间件技术的研究与设计第一章绪论 存储在磁盘上以及日志机制来保证消息的可靠传输,即 使在发生系统崩溃或网络故障的情况下恢复到出错前的 完整状态,并继续进行传输。 总之,消息队列中间件可以屏蔽底层操作系统的复杂性,使程序 开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性, 将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移 植而重复工作,从而大大减少了技术上的负担1 。 3 消息队列中间件的应用 消息中间件适用于需要在多个应用之间进行可靠数据传输的分 布式环境。它广泛使用在以下领域: i ) 数据的异地备份 消息队列中间件强大的数据传输能力和对消息可靠传输 的保证,再加上对软、硬件平台和通讯协议的屏蔽,使得数 据的异地备份变得简单易行。 2 ) 电子商务 电子商务的本质就是对处于分布环境中的各种计算机 系统进行交流协调,从而开创新的商业运作模式。目前电子 商务的发展已经到了第三个阶段,就是利用分布式组件技术 使w e b 应用具有更高的可用性和可靠性,成为可运行关键任 务的系统,同时能够同旧的系统进行集成。将消息队列中间 件与) ( m l 、w e bs e r v i c e 等技术结合起来作为第三代电子商 务的通信平台可以很好的满足b 2 b 和b 2 c 的应用“。 3 ) 企业应用集成( e a i ,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 是消息队列中间件最大的应用领域。e a i 将业务流 程、应用软件、硬件和各种标准联合起来,在两个或更多的 企业应用系统之间实现无缝集成,使它们像一个整体一样进 行业务处理和信息共享,从而消除企业内部的“信息孤岛”, 提高企业效率。为客户提供灵活的业务服务。e a i 非常复杂, 它涉及到企业计算平台的各个层次,包括体系架构、硬件、 软件和业务流程。 e a i 的历史是与消息中间件相联系的,并且消息队列技 第一章绪论 消息代理中问件技术的研究与设计 术目前仍然是e a i 技术的核心h 1 。酗蛹之所以对e a i 十分重 要,一个是因为它确保了在应用系统之间异步的可靠消息传 递,为连接企业的信息资产提供了一个简单的方法。另一个 原因是m q m 提供了一个平台一致的应用编程接口( a p i ) ,它 简化了网络执行的复杂性。 m 渊主要用来实现应用间的信息连结,在e a i 的集成层 次中属于应用集成。e a i 中更高层次的是业务规则集成,由 工作流等能提供过程集成的产品负责。但是这些过程集成产 品一般都利用m q m 作为底层的数据传输机制。 4 消息队列中间件存在的不足 下面通过一个例子来说明m q m 的不足。图1 - 2 描述了一个简单的 企业内部应用: t z 删馘s t w k 图卜2 一个简单的企业内部应用图 应用a 使用m q m 发送消息给应用b 。在设计阶段,双方约定 消息正文的格式如下: 1 ) 字段顺序依次为t r a d e r n a m e ,s t o c k ,q u a n t i t y ,p r i c e ,d a t e , 且字段间用逗号“,”分隔。 2 ) d a t e 使用美式日期表示法( 月份日期年份) 。 3 ) p r i c e 使用美元符“$ ”表示。 由于应用a 和b 都能理解这个消息,因此系统可正常运行。 后来应用c 加入了系统,它也需要应用a 产生的这个消息。 但它只接收这样的格式: 1 ) 字段间用“# ”分隔。 2 ) d a t e 使用英式日期格式( 日期月份年份) 。 3 ) p r i c e 使用英镑符“”表示。 假设应用c 是一个遗留系统( 1 e g a c ys y s t e m ) 或是被提供商 打包过( p a c k e d ) 的程序,那么选择对应用c 进行修改是很不明 智的。在这种情况下,有两种解决办法: 1 ) 对应用a 进行增强,即编写代码使它除了产生满足应用b 的消息之外还能产生满足应用c 所要求格式的消息。在将 这两个消息通过消息队列分别传送到应用b 和应用c 。这 些代码叫做接口代码,它们与企业的业务逻辑没有任何关 系,是为了连接这两个应用所做的额外工作。 2 ) 在应用c 的接收队列上编写出口( e x i t ) 转换程序。应用 a 给应用b 和c 发送同样的消息。当应用c 到队列中取消 息时,m q m 调用出口转换程序,进行消息格式的修改以满 足应用c 的要求。 当应用d 也加入了系统且它对格式还有其它要求的话,应用 a 还得做出修改。系统中只有几个应用时,这种情况还可以处理, 但当系统中需要相互通信的应用越来越多时,完成格式转换的接 口代码也越来越多,最终,应用之间的连接变得像意大利面条一 样错综复杂。图卜3 形象地说明了意大利面条综合症( s p a g h e t t i s y n d r o m e ) 以及该集成方式的缺点畸3 。 可见当需要相互通信的应用只产生或只接受独特的数据格式 时,使用m q m 对它们进行集成就显得非常繁琐并且可维护性很差, 每个不同的格式要求都可能导致编写大量的接口。 为了解决m q m 的这个问题,并且仍然能够利用m q m 强大的消 息传输能力,出现了消息代理中间件解决方案。 1 1 2 消息代理中间件概述 1 消息代理中间件定义 消息代理( m b ,m e s s a g eb r o k e r ) ,也称为消息中介,是一种在 数据源与目的地之间移动数据使信息处理流畅的软件技术,数据源与 目的地包括已有的应用、文件、数据库、对象( 如c o r b a 、c o m ) 、硬 拷贝输出及w e b 客户端等哺3 。消息代理技术可以利用基本的、一对一 第一章绪论消息代理中间件技术的研究与设计 形式的中间件,如远程过程调用中间件、消息队列中间件、事务处理 监控器等,来完成消息发送。由于消息队列中间件技术已经非常成熟 且具有强大的消息处理能力,因此在消息代理的实现中主要使用消息 队列中间件来作为底层的传输机制。 消息代理中间件是以消息队列中间件作为底层的传输核心,在其 上提供了应用集成所必须的数据的转换、收集、翻译、过滤、映射和 路由等功能的消息代理实现形式哺3 。消息代理中间件也属于m o m 。 缺点:应用闻接口采用硬蝙目的形式设有弹性 实现起来复杂、昂贲且功能郁b 应用阀撒口按珈a 卜1 ) 增长( h 为应用的个数, 图卜3 某财务公司的内部应用交互图 2 消息代理中间件的优点 消息代理中间件首先具有消息队列中间件的所有优点。其次,它 将消息转换规则和消息路由规则等应用集成逻辑从应用程序中分离 出来,形成一个单独的逻辑层,由消息代理集中处理这些规则。规则 的改变只影响消息代理,而不会影响到应用程序。这种结构称为h u b a n ds p o k e 结构。 图卜4 是显示了图卜3 中使用消息代理后的内部应用交互图以及 使用消息代理集成方式的优点。 消息代理中间件技术的研究与设计第一章绪论 忧点:原应用的修改或新应用的加入很容景 降低了应用的复杂性使用集中定义的转换逻辑和陆由逻辑) h u b d s p o k e 结构提供了夏活性 应用间的接口很少 圈1 - 4 某财务公司使用;肖患代理后的内部应用交互图 3 消息代理中间件的应用 消息代理主要应用在以下场合: 1 ) 系统中有许多应用,特别是混合多种语言。 2 ) 系统中存在多个数据源和或异构的数据库。 3 ) 应用程序的生命周期期望在3 年以上。 4 ) 需要处理的数据量很大、结构复杂的系统。 5 ) 在c s 环境中存在遗留系统( l e g a c ys y s t e m ) 或已部署的应 用。 6 ) 行将进行系统的增强、增加和修改。 7 ) 复杂的应用间的通信既有企业内部的通信,又有企业间的通 信。 1 2 消息中间件的研究现状与发展预测 1 2 1 国内外消息中问件的研究现状 国外中间件产品的起步较早,早在8 0 年代就提出了中间件的概 念,但当时并没有广泛的应用基础。自九十年代中期i b m 和b e a 相继 推出了消息队列中间件m qs e r i e s 和m e s s a g e q 后,消息中间件开始 消息代理中间件技术的研究与设计 逐渐应用在大型企业中。此后消息中间件得以快速发展,从简单的消 息存储转发到发布订阅再到企业业务规则的参与,逐渐地走向成 熟。目前的重点是集成代理,目的是尽量多地把企业的业务逻辑从应 用编码中分离出来,形成一个单独的业务逻辑层,由消息代理提供的 基础设施来集中处理。这种方式大大减少了网络的通信流量,同时也 简化了客户端的编程。代表性的产品是i b mw e b s p h e r em q i n t e g r a t o r 。 国内在中间件领域的起步阶段正是整个世界范围内中间件的初 创时期。北京的东方通科技公司早在1 9 9 5 年就推出了第一个消息中 间件产品t o n g l i n k q 。可以说,在中间件领域国内的起步时间并不 比国外晚多少”3 。但由于国内市场需求的相对狭窄以及国外中间件对 国内市场的冲击使得国产中间件难以得到大量应用,因此发展较为缓 慢。虽然近几年陆续出现了一些消息中间件产品如北京中科的a 2 e m q , 清华北美的t h - m t ,中科院软件所的i s m q 等,但是这些产品的侧重 点是实现消息的可靠传递,而缺乏有效地处理企业业务逻辑的机制。 1 2 2 未来消息中间件的发展预测 随着各种计算机标准的出现和技术的进步,中间件技术作为软件 行业崛起的一个崭新分支,正在全球范围内迅猛发展。下面从技术、 应用和市场几个方面探讨消息中间件的未来发展方向。 1 技术发展 缺少一个开放的标准是消息中间件不能被大量使用的重要障碍。 各个厂商的消息中间件产品都有一套自己的a p i ,更换不同的产品给 二次开发人员带来了学习负担。另外不同消息中间件产品之间的相互 通讯需要专门的适配器才能完成。另一方面,大量支持分布式计算的 新标准不断出现,如j a v a 消息服务( j m s ) ,可扩展标记语言( x m l ) , w e b s e r v i c e 等1 。这些新标准的出现并不会导致消息中间件的消失, 相反,它们可以为消息中间件的实现带来新的思路。如何将各种标准 融合在一起,解决不同厂商的产品在互操作性、扩展性、管理和健壮 性上的差异,提供一个一致的消息通信平台是今后消息中间件的发展 要解决的问题。 消息中间件的一种新的发展趋势是:增加协同处理、处理自动化 消息代理中间件技术的研究与设计 第章绪论 等“商件”( b u s i n e s s w a r e ) 模快,比较直观地支持在商务逻辑层上 的应用集成与开发。与商件的结合,是消息代理中间件的一个重要的 技术走向”1 。 2 应用发展 g a r t n e rg r o u p 根据调查统计,企业在开发应用的过程中, 3 0 - 4 0 的费用都浪费在开发和维护与企业业务逻辑无关的各种接口 上。随着企业或企业问应用数量上的增加,应用间的通信接口日益增 多,不同的平台、不同的语言与技术所带来的难度成倍的增长。但是 使用一个集成代理将使集成费用减少三分之一。并且在系统维护的过 程中,当一个应用系统的一个改变可能会影响到几个到几十个接口 时,集成代理的使用将使成本减少三分之二。g a r t n e rg r o u p 预测: 消息代理中间件由于降低了企业机构内部应用的复杂交互,将变得 和数据库管理系统、数据仓库一样重要“1 。 3 市场预测 据赛迪顾问预测,今后几年,中国中间件市场的应用需求将以 2 8 以上的年均复合增长率快速增长,2 0 0 5 年市场销售额将达到8 9 亿元;同时,随着政府电子政务、教育信息化以及其它传统行业信息 化建设步伐的加快,传统行业对于中间件软件的需求将以3 2 以上的 增长率快速增长,传统行业在中间件市场中的份额将日趋增加3 。 g a r t n e r 则预测集成代理套件在2 0 0 0 到2 0 0 5 年的复合增长率 将超过3 3 ,这代表了中间件市场的最高的增长率。这样的增长率吸 引了大量e a i 供应商、应用服务器提供商和企业信息系统( e i s , e n t e r p r i s ei n f o r m a t i o ns y s t e m ) 供应商。其中消息代理是最热门 的技术“1 。 1 3 本文所做的工作 鉴于上述消息代理中间件的优点以及巨大的市场空间,消息代理 中间件具有较高的研究及应用价值。本论文通过分析消息代理中间件 的功能需求,以消息队列服务提供的可靠数据传输为基础,在其之上 增加了消息转换和路由等功能,设计了一个简单的消息代理系统,并 给出了关键组件的实现。因为消息代理中间件主要用于集成不同的应 用程序,所以把该系统命名为消息集成代理( m i b ,m e s s a g e 第一章绪论消息代理中间件技术的研究与设计 i n t e g r a t i o nb r o k e r ) 。具体地说,本论文主要做了以下几方面的工 作: 1 ) 分析了消息队列中间件中消息队列服务的工作原理,作为后面 消息代理设计的理论基础。 2 ) 设计了一个消息集中处理方案,包括消息的表示模型、存储模 型、消息流、解析器和脚本等技术。 3 ) 设计了一个简单的消息代理中间件叫i b ,并在w i n d o w s 平台 上用c 语言实现了消息流引擎。 作。 本论文的后续章节按如下顺序组织: 第二章介绍消息队列服务的工作原理。 第三章详细阐述m b i 的消息集中处理方案。 第四章给出m b i 的设计与关键部分的实现。 第五章是结束语,对本文进行了总结,并设想了m i b 的下一步工 消息代理中问件技术的研究与设计第二章消息队列中间件的t 作原理 第二章消息队列中间件的工作原理 消息队列服务是m q m 的核心,它也是消息代理中间件的底层数据 传输机制,负责所有联接到消息代理的应用之间的数据传输,是消息 代理中间件的一个组成部分。虽然各个m q m 产品的具体实现各不相 同,但是关于消息队列的工作原理基本上是相同的。本章以i b m 公司 的m q s e r i e s ( 以下简称m q ) 为例,阐述m q 的工作原理以及m q 的消 息队列服务实现。 2 1 消息队列的相关术语”1 1 消息队列排队( m e ss a g eq u e u i n g ) 消息队列排队是一种程序间通信机制。 可以将消息队列排队看成是向程序发的电子邮件。在消息队列排 队环境中,组成应用程序组的每个程序都被设计成在响应一个指定的 请求时,能够执行一个具有良好定义的、独立的功能。要与另一个程 序进行通信,程序必须将消息放入一个预定义的队列。另一个程序从 队列中检索消息,并处理消息中所包含的请求和信息。 通过队列排队,消息可以保留到应用程序准备好对它们进行处 理。队列排队完成以下事情: 1 ) 在程序之间通信( 这些程序可以是各自运行在不同环境中的) , 而不需要编写通信代码。 2 ) 通过消息的优先级确定程序处理消息的顺序。 3 ) 当消息的数目超过阈值时,可以通过触发一个或多个程序去为 队列服务,来实现系统的平衡加载。 2 消息( m e s s a g e ) 一个程序发出的对另一个程序来说有用的数据集合。消息一般分 为以下四种类型: 1 ) 数据报:不期望应答的简单消息。 2 ) 请求:期望应答的消息。 第二章消息队列中问件的工作原理 消息代理中间件技术的研究与设计 3 ) 应答:对请求消息的回复。 4 ) 报告:描述一个事件的消息,如错误。 消息由控制信息和应用程序数据组成。控制信息在消息头结构中 定义,而消息头结构由中间件系统规定,且在不同的消息中间件中有 不同的结构,一般应包括:消息标识、消息类型、消息优先级、消息 存活时间等。应用程序数据的结构和内容则由参与程序来确定。下面 的c 结构描述了i b mm q s e r i e s 的m q m d 消息头结构( 节选) 3 。 s t r u c tt a g m q m d m q c h a r 4s t r u c i d : m q l o n g m s g t y p e : m q l o n ge x p i r y : m q l o n g c o d e d c h a r s e ti d m q c h a r 8f o r m a t : m q l o n g p r i o r it y : m q l o n gp e r s i s t e n c e : m q b y t e 2 4m s g i d : m q c h a r 4 8r e p l y t o q : m q c h a r 4 8r e p l y t o q m g r : m q c h a r l 2 u s e r i d e n t i f i e r m q l o n gp u t a p p l t y p e : m q c h a r 2 8 p u t a p p l n a m e : m q c h a r 8p u t d a t e : m q c h a r 8p u t t i m e : b y t e 2 4 g r o u p l d : m q l o n gm s g s e q n u m b e r : m q l o n go f f s e t : m q l o n g m s g f l a g s : m q l o n g o r i g i n a l l e n g t h 结构标识符 $ 消息类型 a 消息存活期 正文使用的字符集$ a 正文的格式 a 消息优先级 木是否是永久消息 霉消息标识符 应答队列名称 应答队列管理器名称十 木用户标识 a 发送方应_ j 的类型 奉接收方的麻j h 名称 a 消息放入队列的日期 消息放入队列的时间 a 组标识符 宰组内的顺序号 a 组内的偏移 丰消息标志 幸消息长度 ) : 消息还可分为永久消息和非永久消息。永久消息被保存到存储介 质上,在系统故障或重新启动后还可恢复。而非永久消息则在系统故 障或重新启动后丢失。若使用非永久消息就不能保证消息能可靠地到 达目的地,但使用永久消息则会带来存储空间上的负担。使用哪一种 类型由参与程序来决定。 消息代理中闻件技术的研究1 了设计第二章消息队列中闻件的工作原理 3 消息队列( m e s s a g eq u e u e ) 简称为队列,是一个消息可发送到的并已被指定名称的目标。消 息在队列中累积,直至被那些服务于队列的程序检索到。 队列定义在队列管理器中,并由其进行管理。队列的物理性质取 决于运行队列管理器的操作系统。队列可以是计算机内存中易失的缓 冲区,也可以是永久性存储器设备( 如磁盘) 上的数据集。队列的物理 管理是队列管理器的责任,对于参与应用程序来说是不透明的 程序访问队列只通过队列管理器的外部服务。它们可以打开一个 队列、将消息放入其中、从中取得消息以及关闭队列。它们也可以设 置和询问队列的属性。 消息队列可分为以下类型 1 ) 本地和远程队列 对于程序而言,如果队列属于该程序所连接的那个队列管理 器,那么这个队列就是本地的;如果属于不同于该程序所连接 的那个队列管理器,那么这个队列就是远程的。这两种类型的 队列之闻重要的区别是:您只能从本地队列中取出消息。( 在 这两种类型的队列中均可放入消息。) 2 ) 别名队列 对于您的程序而言,别名队列就象队列一样,但它实际上是一 个m q s e r i e s 对象,您可以用它来访问另一个队列。这意味着 有一个以上程序可以在同一个队列上工作,使用不同的名称来 对它进行存取。 本地队列按用途还可分为以下五种: 1 ) 传输队列 传输队列是一个本地队列,它保留了指定给远程队列的消息。 在有可用的通信程序和链路时,消息通道代理将消息转发给它们 的目的队列。 本地队列可以被配置为触发队列,并有三种触发类型: a ) 第一个:当传输队列中接收到第一个消息时 b ) 每个:当传输队列中每接收到一个消息时 c ) 深度:当传输队列中收到的消息数目达到指定值 第二章消息队列中间件的工作原理消息代理中间件技术的研究与设计 当相应的条件满足时,将引起传输队列的触发事件,并将触 发消息放入指定的启动队列。 2 )启动队列 启动队列是一个本地队列,队列管理器将自动启动应用程序 的消息放入这个队列,当本地队列上满足某些条件时( 例如,有1 0 个以上消息到达) ,就可自动启动应用程序。 3 ) 死信( 不可传递的消息) 队列 死信队列是一个本地队列,队列管理器和应用程序可以将它 们无法传递的消息放到这个队列中。应准备处理任何到达这一队 列的消息。 4 ) 通道队列 通道队列用于分布式队列管理。 5 )事件队列 事件队列保留事件消息。这些消息是由队列管理器或通道报 告的。 4 队列管理器( q u e u em a n a g e r ) 队列管理器是一个为应用程序提供队列排队服务的系统程序。它 提供了一个应用程序设计接口,使得程序可以将消息放到队列上,也 可以从队列上取得消息。队列管理器提供了额外的功能,使得管理员 能够创建新的队列、改变现有队列的特性以及控制队列管理器等操 作。 多个应用程序可以同时使用队列管理器的服务,而且这些应用程 序之间可以是完全不相关的。对于一个要使用队列管理器服务的程序 来说,它必须与该队列管理器建立连接。 对于发送消息的应用程序( 它们能将消息发送给连接在其它队列 管理器上的应用程序) 来说,这些队列管理器必须能够相互通信。消 息中间件实现了存储转发协议,以确保在这些应用程序之间消息的完 全传递。 5 通道( c h a n n e l ) 通道是分布式应用程序所使用的一个通信链路。两个队列管理器 之间利用消息通道进行通信,消息通道通过通道代理将两个队列管理 消息代理中间件技术的研究与设计第二章消息队列中间件的工作矩理 器连接起来,将消息从一个队列管理器传输到另一个队列管理器。 消息通道是单向的,它由下列三部分组成: 1 ) 传输队列 2 ) 每个队列管理器的消息通道代理 3 ) 通信链路 消息通道的两端被定义为如下几种类型之一: 1 ) s e n d e r 2 ) r e c e i v e r 3 ) s e r v e r 4 ) r e q u e s t e r 消息通道的一端用其中的一种类型定义,另一端则用相匹配的 类型定义。所有可能的组合如下: 1 ) s e n d e r r e c e i v e r 2 ) r e q u e s t e r s e r v e r 3 ) r e q u e s t e r s e n d e r ( c a ll b a c k ) 4 ) s e r v e r r e c e i v e r 6 消息通道代理( m c a ,m e ss a g ec h a n n e la g e n t ) m c a 是一个控制消息发送和接收的程序,在通道的每一端都有一 个m c a ,一个从传输队列中取出消息并将它放进通信链路,另一个m c a 则接收消息并把它放入相应的远程队列管理器。 发起通信端的m c a 叫做c a l l e rm c a ,另一端则称为r e s p o n d e r m c a 。 c a l l e r m c a 可以使用s e n d e r 、s e r v e r 和r e q u e s t e r 通道类型, 而r e s p o n d e rm c a 可以使用任何通道类型。 7 通道启动器和通道侦听器( c h a n n e li n i t i a t o ra n dl is t e n e r ) 因为传输队列可以被配置为触发队列,所以通道启动器的作用 就是作为发送端m c a 的触发监控器。当传输队列满足指定的触发原则 时,将会发送一个信息给启动队列,并引起通道启动器启动相应的发 送端m c a 。 第二章消息队列中问件的工作原理 消息代理中间件技术的研究与设计 通道侦听器用来启动接收端的m c a ,以响应发送端m c a 的启动请 求。通道侦听器检测进入的网络请求并肩动响应的通道。 2 2m q 的体系结构m 3 1 图2 - 1 从功能的角度描述了m q 的体系结构。 日 志 管 理 系 统 管 理 运 行 监 控 应j _ 程序 编程接口( a p l ) 协议栈 通道代理m c a 安 全 管 理 远 程 管 理 代 理 圈2 - 1m 洲的体系结构图 m q 主要由消息队列、队列管理器、消息通道代理和安全管理等 模块组成。队列管理器是m q 的核心组件,它负责队列的创建和删除, 并控制队列的行为和调整队列的优先级;消息通道代理负责将消息通 过物理链路投递给其它的消息队列,探测网络通道故障并从故障中恢 复也是m c a 的工作:名字服务通过消息队列的名称定位到该消息队列 的实际物理资源:安全管理负责控制对消息的存取权限以及加解密操 作。从图中还可看出,应用程序处于结构图的最上层,只和应用编程 接口a p i 打交道,其余的都交给消息中间件提供的底层服务来完成, 简化了用户的编程。 2 3m 0 的消息传递机制 2 3 1m q 中消息的总体传输过程”“ 图2 2 描述了应用程序的消息在m q 中的流动过程。 会话管理 消息队列可靠队列 应刚管理 名字服务 消息代理中间件技术的研究设计第二章消息队列中间件的工作原理 图2 2m 0 中消息的总体传输过程 对该图的具体说明如下: 1 ) 当应用程序a 有消息要放到队列时,它首先调用m q p u t 函数, 队列管理器a 检查应用程序传给m q p u t 函数的队列名称参数是 本地队列还是远程队列。若是本地队列,队列管理器可直接将 消息放入目标队列。由于在本图中是远程队列,消息将被放入 传输队列。队列管理器还为该消息加上一个消息头,消息头中 包含从远程队列的定义中抽取出的信息,如目标队列管理器名 称和目标队列名称。 2 ) 消息的传输是由通道完成的。通道有两种启动方式:手动或自 动。若想自动启动通道,传输队列必须指定启动队列名称。从 图2 2 中可见,队列管理器将消息放入传输队列同时也放了一 个消息给启动队列。通道启动器对启动队列进行监控。 3 ) 当通道启动器检测到启动队列中有消息时,它将启动通道的 m c a ,m c a 使用单向消息通道的发送端将消息通过网络移动到 另一台计算机。 4 ) 在接受端,通道侦听器必须已经运行( 通道侦听器一般随着队 列管理器一起运行) 。通道侦听器监视着某一个特定端口( m q 的默认端口是1 4 1 4 ) 。当有消息到达时,它启动接收端的m c a 。 m c a 使用单向消息通道的接收端将消息移动到指定的本地队 列。 第二章消息队列中间件的工作原理消息代理中间件技术的研究与设计 5 ) 等待应用程序a 发出消息的应用程序b 可以手动启动也可以自 动启动。若想自动启动应用程序,必须为本地队列指定启动队 列名称和进程定义,触发盟控器也必须一直运行。 6 ) 当应用程序配置为自动启动时,m c a 将到达消息放入本地队列 的同时还将一个触发消息放入系统启动队列。触发监控器检测 到该消息后,根据进程定义启动相应的应用程序,应用程序运 行后,调用a p i 函数m q g e t 从本地队列中取出消息。至此,完 成应用a 和b 之间的通信。 2 3 2 队列管理器间的消息传输过程 通过m q 通信的计算机都安装有队列管理器,每个队列管理器都 可以管理多个本地队列。发送到远程队列管理器的消息被放入远程队 列。远程队列并不是真正的队列,它只是远程队列管理器上的队列在 本地的定义。远程队列必须和本地的传输队列相关联。通常为每一个 远程队列管理器定义一个传输队列。 必须为传输队列定义消息通道。消息通道是单向的,这意味着若 想进行交谈式的通信必须定义两个消息通道,而且每一个通道必须定 义两次:一次是在消息发送端的系统上( 发送端通道) ,另一次是在 消息接收端的系统上( 接收端通道) ,发送端通道和接收端通道还必 须使用相同的名字。图2 3 给出了两个队列管理器之间的通信图。在 图中应用1 想通过传输队列q m b 发送消息给应用2 ,因此在队列管理 器a 和队列管理器b 上分别定义了相同名称的通道q m a q m b 。消息通 过这个单向通道传送到应用2 所在的队列管理器。若应用2 想发送消 息给应用1 ,它不能通过通道q m a q 她发送消息,因为通道是单向的, 而且已被定义为队列管理器a 到队列管理器b 。所以,还必须在队列 管理器a 和队列管理器b 上分别定义了另一个相同名称的通道 q m b q m a ,这样才能发送消息给应用1 。关于数据在通道之间的传输 过程在下一节介绍。 消息代理中间件技术的研究与设计第二章消息队列中间件的工作原理 s y s t e m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论