消息队列中间件技术研究与功能分析

(内蒙古财经学院 计算机信息管理学院,内蒙古 呼和浩特 010020)
摘 要:文章介绍了消息中间件的定义、国内外研究现状及未来发展,介绍了其特定的应用,并作了功能分析。
关键词:消息队列中间件MQM;分布式应用;消息中间件MOM
中图分类号:TP319  文献标识码:A  文章编号:1007—6921(2009)02—0071—02
1 消息中间件相关技术理论分析和技术研究
1.1 消息中间件的定义

消息中间件(MOM, Message Oriented Middleware)是一种利用高效可靠的消息传递机制进行与平台无关的数据通信,并基于数据通信来进行分布式系统集成的软件。它通过将信息以消息(该消息除包含了应用程序处理所需的数据外还应该包含其它成分,例如消息的发送者、接收者,消息的一些控制信息)的形式,从一个应用程序传送到另一个或多个应用程序。消息中间件在TCP/IP网络体系结构中处于应用层,网络应用程序建立在消息中间件之上,实现各种分布式应用服务,如图1所示。消息中间件可以在分布式环境下扩展进程间的通信,并支持多种通讯协议,多种软、硬件平台。


1.2 消息中间件国内外研究现状

中间件的概念很早就已经产生,但中间件技术的广泛运用却是在最近10年之中的事情。消息中间件是中间件范畴中发展最快的中间件类型之一。

国外中间件产品的起步较早,最早具有中间件技术思想及功能并投入实用软件的是IBM的CICS,但由于CICS不是分布式环境的产物,因此人们一般把Tuxedo作为第一个严格意义上的中间件产品。Tuxedo是1984年在当时贝尔实验室开发完成的,1995年被BEA公司收购。IBM的消息中间件MQSeries是90年代的产品,而BEA的MessageQ和Microsoft的MSMQ等消息中间件产品也都是最近几年才成熟起来的。

IBM MQSeries是IBM的消息处理中间件。MQSeries提供一个具有工业标准、安全、可靠的消息传输系统。它的功能是控制和管理一个集成的系统,使得组成这个系统的多个分支应用(模块)之间通过传递消息完成整个工作流程。MQSeries基本由一个信息传输系统和一个应用程序接口组成,其资源是消息和队列。

MQSeries的关键功能之一是确保信息可靠传输,即使在网络通信不可靠或出现异常时也能保证信息的传输。MQSeries的异步消息处理技术能够保证当网络或者通信应用程序本身处于“忙”状态或发生故障时,系统之间的信息不会丢失,也不会阻塞。

同时,MQSeries是灵活的应用程序通信方案。MQSeries支持所有的主要计算平台和通信模式,拥有连接至主要产品的接口。

国内在中间件领域的起步阶段正是整个世界范围内中间件的初创时期。北京的东方通科技1995年就推出第一个中间件产品 Tong LINK / Q。TongLINK/Q是面向分布式应用的消息传送中间件。它为网络环境下客户机/服务器结构的应用系统的开发和运行,提供了灵活和易用的支撑平台。TongLINK/Q提供两种通信方式:实时通信传输和可靠通信传输。

TongLINK/Q提供高效可靠的分布式应用开发和运行平台,以及对多种开发工具的支持。同时,还提供分布式应用管理平台,可以通过名字服务和应用管理,提供分布式应用的管理和监控。采用订阅和发布模型,通过事件代理机制,提供了一种简便的开发模型〔12〕。

可以说,在中间件领域国内的起步时间并不比国外晚多少。但是现有的中间件产品距其应遵循的一些原则还有较大距离。
1.3 未来消息中间件的发展

随着各种计算机标准的出现和技术的进步,中间件技术作为软件行业崛起的一个崭新分支,正在全球范围内迅猛发展。下面从技术、应用和市场几个方面探讨消息中间件的未来发展方向。

缺少一个开放的标准是消息中间件不能被大量使用的重要障碍。各个厂商的消息中间件产品都有一套自己的API,更换不同的产品给二次开发人员带来了学习负担。另外不同消息中间件产品之间的相互通讯需要专门的适配器才能完成。另一方面,大量支持分布式计算的新标准不断出现,如JAVA消息服务(JMS),可扩展标记语言(XML) ,Web Service等。这些新标准的出现并不会导致消息中间件的消失,相反,它们可以为消息中间件的实现带来新的思路。如何将各种标准融合在一起,解决不同厂商的产品在互操作性、扩展性、管理和健壮性上的差异,提供一个一致的消息通信平台是今后消息中间件的发展要解决的问题。

消息中间件的一种新的发展趋势是:增加协同处理、处理自动化等“商件”(Businessware)模块,比较直观地支持在商务逻辑层上的应用集成与开发。与商件的结合,是消息代理中间件的一个重要的技术走向。

Gartner Group根据调查统计,企业在开发应用的过程中,30%-40%的费用都浪费在开发和维护与企业业务逻辑无关的各种接口上。随着企业或企业间应用数量上的增加,应用间的通信接口日益增多,不同的平台、不同的语言与技术所带来的难度成倍的增长。但是使用一个集成代理将使集成费用减少1/3。并且在系统维护的过程中,当一个应用系统的一个改变可能会影响到几个到几十个接口时,集成代理的使用将使成本减少2/3。


Gartner Group预测:消息代理中间件由于降低了企业/机构内部应用的复杂交互,将变得和数据库管理系统、数据仓库一样重要。
2 消息队列中间件

消息队列中间件(MQM, Message Queue Middleware)通过消息队列接口为程序提供一种异步通信方式。消息队列中间件是由消息队列管理器支持的。消息队列中间件允许程序向队列发送或从队列取走消息,不同的程序可以通过共享队列交换消息。

队列化消息传递是最新的通信模型,其基本特征在于接口用户之间不存在逻辑连接,消息队列中间件用者和供者的基本关系是消息的发送者或接收者与消息排队、消息传输者的关系。队列化消息传递的思想应用在客户机/服务器模式的分布式环境中,利用消息队列统一处理通信双方的请求及应答,将客户机和服务器孤立开。消息队列中间件使用简单的编程接口,使用消息队列中间件的程序较简单,而且容易实现程序的完整性、一致性、可移植性。

消息队列中间件是通过使用驻留在内存或硬盘上的队列作为消息缓冲,提供分布式应用间可靠信息交换的机制。图2显示了应用程序与消息队列中间件的通讯图。

消息队列中间件特点:

消息队列中间件提供消息的传递和消息排队模型,它可在分布环境下扩展进程间的通信,并支持多通信协议、语言、应用程序、硬件和软件平台,概括起来它具有以下几个特点:

①提供多种通信方式:通信程序之间不仅可以是一对一的关系,而且还可以进行一对多、多对一,甚至是上述多种方式的组合。

②多平台多传输协议:能够运行在不同的操作系统和支持多种通信协议。

③松耦合结构及异步传输模型:通信程序不在网络上直接相互通话,而是间接地将消息放入消息队列,消息接收程序在需要的时候从队列取出消息,所以它们不必同时运行。源应用程序将消息放入队列时,目标应用程序有可能还未开始运行;即使目标应用程序正在运行,也不意味着目标应用程序必须立即处理该消息。通信程序把消息放入队列后不必等待消息的传输及结果的返回,通信是一个异步的过程。

④保证消息传输:通过消息队列,可以对消息进行永久保存,对短暂的系统或网络故障具有可恢复性,保证消息的可靠传输。

⑤队列内部排序:消息队列可以采用各种不同的排序方式对队列中的消息进行排序,例如,它可以采用 FIFO、按优先级排序,也可以按用户定义的关键字段排序,这使得具有某种特征的消息能够被优先处理。

⑥流量控制:采用队列技术,可以方便控制发送、接收队列消息的存放个数和规则,进而可以方便实现消息发送程序的发送速度,达到流量控制的目的。
3 消息队列中间件功能分析
3.1 MQM的服务端功能分析   

消息队列中间件服务端具有以下功能:
3.1.1 及时有效正确地接收所有连接客户端所发出的消息封包

监控连接集合的数据传输情况的,然后调度适当的操作对到达的数据进行接收,构造完整的消息封包。
3.1.2 将消息封包按照不同的发送模式(一对一,一对多,广播),发送到合适的连接着的客户端发送至指定客户端:

消息中间件服务器为每一与其建立连接的客户端分配抽象的连接标识,此标识由服务端创建、维护与解析,客户端无需了解其确切意义;服务端可根据此标识定位客户端连接以及区分不同的客户端连接,客户端根据此标识来指定消息封包所要确定发送的目的客户端。

发送至多客户端或广播:服务端维护所有连接至其的客户端连接信息,广播式消息封包可枚举当前所有连接,向其进行发送。
3.1.3 消息发送以多线程方式进行,向某一客户端发送失败不影响向其它客户端的发送

服务器以多线程方式运行,以充分并发CPU操作与IO操作,有效利用系统资源为目的;在任务分配方式上,各线程负责完成消息发送的某一步骤,减少线程间访问数据信息的共享。接收到的消息封包将根据发送模式进行更细的独立任务分解,每一任务包含相关的消息封包与其某一确定的发送连接,发送线程负责完成这些独立细化任务,因此同一消息向不同客户端发[CM(22]送的任务对于发送线程完全独立,互相之间的成功或失败不形成任何影响。
3.1.4 消息向某一客户端发送失败时,需以一定时间间隔进行多次重传后,才能放弃

服务端维护失败任务集合与专门的失败发送线程,发送失败的任务将移交至失败任务集合,而失败发送线程将以一定的时间间隔对这些任务进行重试,达到一定次数后放弃。
3.1.5 服务端需维护连接池。连接池由服务端程序在系统初始化时根据连接数上限进行构造,以使系统运行时不必因构造与分配连接相关资源产生太大的开销。
3.1.6 对消息中间件服务端的监控与控制。对消息中间件服务器运行参数的配置通过配置文件的形式来支持,服务端程序提供一系列可配置的运行参数,可由程序在启动时读入与应用。提供专门的监控模块查询系统运行情况,并以此向管理者报告可能的警告信息。
3.1.7 支持日志功能。服务端所有的消息封包在销毁前需经过日志处理模块,根据配置的日志管理参数,对各消息封包进行相应的日志记录工作。
3.2 MQM的客户端功能分析 

消息队列中间件客户端应具有以下功能:
3.2.1 支持请求式消息发送方式。应用层发送请求式消息,底层客户端将消息通过建立的连接发送给服务端,并注册一个等待事件,并阻塞;当对应的回覆消息到达时,通过匹配回覆消息所带的原消息ID,设置对应的等待事件,使原来的应用层请求操作返回,并获得对应的回覆消息。若等待回覆超过一定时间限制,则向应用层返回超时信息。
3.2.2 支持发送消息。客户端仅需简单地将应用层传递来的消息封包通过建立的连接发向服务端即可,无需接收回覆信息。底层客户端可在发送前对消息封包进行一些额外处理,如压缩消息数据等。
3.2.3 支持接收消息。客户端底层接收一切来自服务端的消息封包,并根据其传送模式,将回覆式消息交由请求消息处理模块,其它的消息封包缓存至接收消息队列,以由应用层的接收调用操作获取。底层客户端可在接收到消息封包后对其进行一些必要的额外处理,如解压消息数据等。
3.2.4 与服务节点的连接能在服务节点发生故障重启时,能够自动重连。消息中间件客户端底层检测到连接断开的情况后,不立即向应用层返回,而是通过服务节点分配服务器重新连接可用的服务节点。 
3.2.5 支持日志功能。客户端的所有发送与接收到的消息封包的同时可进行日志记录,日志的配置与管理方式的实现将与服务端的日志功能实现相同。
[参考文献]
[1] 利用消息队列中间件构建分布式应用程序[DB/OL].http://www.microsoft.com.
[2] 冯玉琳,黄涛,金蓓弘.网络分布计算和软件工程[M].北京:科学出版社,2003.
[3] 徐晶,许炜.消息中间件综述[J].计算机工程,2005,31(16).
[4] 东方通科技.TongLink/Q概念与体系结构—东方通科技中间件技术白皮书[DB/OL].http://www.tongtech.comlpdf / Tong Link Q.pdf.

推荐访问:队列 技术研究 中间件 消息 功能