消息中间件(message oriented middleware)是指支持与保障分布式应用程序之间同步/异步收发消息的中间件。消息是分布式应用之间进行数据交换的基本信息单位,分布式应用程序 之间的通讯接口由消息中间件提供。其中,异步方式指消息发送方在发送消息时没必要知道接收方的状态,更无需等待接收方的回复,而接收方在收到消息时也没必要知 道发送方的目前状态,更无需进行同步的消息处理,它们之间的链接彻底是松耦合的,通讯是非阻塞的,这种异步通讯方式是由消息中间件中的消息队列及其服务机 制保障的。通常地,实时性要求较高的业务采用同步方式处理,实时性要求不高的业务采用异步方式进行处理。消息中间件已普遍应用于各种分布式应用系统中。
消息起源于分布式操做系统进程通讯模型和分布式应用互操做技术的研究。1980年代,随着开放系统互连参考模型OSI的兴起,做为开放系统网络模式中底层 的包交换通讯范型的一种天然扩充,分布式系统消息机制的研究和应用获得极大的发展,而统一处理消息发送、接收和管理的消息中间件的概念和平台开始出现。 1980年代后期,IBM公司推出了消息中间件产品MQSeries,成为消息中间件成熟的一个标志。
进入1990年代,因为应用需求的推进,消息中间件技术获得极大的发展,并在世界范围内涌现出大量的消息中间件产品。为了有助于消息中间件技术的传播,由 众多消息中间件厂商、用户和咨询机构组成了消息中间件协会(MOMA),MOMA是一个非盈利机构,旨在推进消息技术在跨平台、跨层次的分布计算中的普遍 应用。国际对象管理组织(Object Management Group,简称OMG)制定了公共对象服务标准(Common Object Service Specifiaction,简称COSS),其中对消息服务进行了规范。
进入21世纪,消息中间件技术获得进一步的发展。在规范化方面,因为J2EE技术的普遍应用,J2EE的消息服务规范JMS(Java Message Service)获得消息中间件厂商的普遍采纳,并逐渐成为消息中间件的事实标准,与此同时,Web服务技术的兴起,与Web服务相关的标准体系获得发展,在消息方面,W3C组织定义了Web服务的可靠消息传送规范(WS-ReliableMessaging)。
目前,企业信息系统开始从部门级应用向企业级、跨企业集成的方向转变,在这一过程当中,传统的消息中间件体系架构也暴露出它的局限性。传统的消息中间件一般 采用点对点的消息传输结构,即在发送方对消息进行打包时须要显明地标注接收方的地址。所以,尽管消息的接收方和发送方是松耦合链接的,相互通讯没必要保持同 步,但因为在消息中必须绑定接收方地址,致使在广域、大型应用系统中使用消息中间件不够灵活,系统扩展比较困难。为了增长消息发送方和接收方之间对地址的 透明性,1990年代末期之后,消息中间件开始向发布/订阅架构转变,并成为企业应用集成中间件的一种核心机制,而基于发布/订阅架构的消息中间件一般称 为发布/订阅消息中间件(Publish/Subscribe Middleware,简称P/S MOM)或消息代理(Message Broker),以与传统的消息中间件相区别。目前比较典型的消息中间件包括IBM WebSphere MQSeries、Tibco TIB/Rendezvous和Microsoft MSMQ等。
传统的点对点消息中间件一般由消息队列服务、消息传递服务、消息队列和消息应用程序接口API组成,其典型的结构如图6.1所示。html
消息中间件的基本工做原理为:在消息发送方,消息发送者调用发送消息的API函数,将须要发送的消息经消息队列服务存储到发送消息队列中;经过双方消息传 递服务之间的交互,经消息队列服务将须要发送的消息从发送队列取出,并送到接收方;接收方再经它的消息队列服务将接收到的消息存放到它的接收消息队列中; 在消息接收方,消息接收者调用接收消息的API函数,一样通过消息队列服务,将须要的消息从接收队列中取出,并进行处理。消息在发送或接收成功后,消息队 列服务将对相应的消息队列进行管理。
在基于消息代理的分布式应用系统中,消息的发送方称为出版者,消息的接收方称为订阅者,不一样的消息经过不一样的主题进行区分。出版者向消息代理出版其余应用 系统感兴趣的消息,而订阅者从消息代理接收本身感兴趣的消息,出版者和订阅者之间经过消息代理进行关联。消息代理的基本结构如图6.2所示。
消息代理具备很好的灵活性和可扩展性,并支持主动、实时的信息传递方式,当消息发布者有动态更新的数据产生时,消息代理会经过事件的发布主动通知消息订阅 者存在新的数据可用,而无需消息订阅者进行频度没法肯定的查询。消息代理适合于具备实时性、异步性、异构性、动态性和松耦合的应用需求。
消息代理的工做原理为:消息发布者和订阅者分别同消息代理进行通讯。消息发布者将包含主题的消息发布到消息代理;消息订阅者向消息代理订阅本身感兴趣的主 题。消息代理对双方的主题进行匹配后,不断将订阅者感兴趣的消息推(Push)给订阅者,直到订阅者向消息代理发出取消订阅的消息。
消息代理实现了发布者和订阅者在时间、空间和流程三个方面的解耦:
数据库
从消息中间件的基本功能来看,不管是点对点消息中间件仍是消息代理,其体系结构都是很是清晰简单的。但因为分布式应用及其环境的多样性和复杂性,致使了消息中间件的复杂性。
消息中间件的复杂性主要体如今下面几个方面:
缓存
消息的表示 消息一般由消息头和消息体两部分组成。消息头用于描述消息发送者和接收者的地址或消息主题,以及消息的服务质量要求,例如,消息传输的时限、优先级、安全属性等;消息体用于描述消息中具体携带的信息内容。目前多采用XML做为消息表示的格式。
消息队列 为了有效控制消息收发过程而在消息中间件中内置的存储消息的数据结构。因为消息多采用先进先出的控制方式,所以,一般采用队列做为消息的存储结构。从消息 的内容来看,消息能够分为发送消息队列、接收消息队列、死信队列(没法投递或过时的消息构成队列)。消息队列也能够按消息发送的质量要求进一步细分,如将 优先级高的队列组织成一个优先队列,以便于处理。从队列存储介质来看,消息队列通常分为持久消息队列、内存队列和高速缓存队列。
安全
消息路由 消息路由借用了IP层的路由和路由器中的路由的概念,但不一样之处在于:消息路由属于应用层的概念。它是为了保证应用之间的消息交换处于可控的状态而设计的 软件功能模块,其机制是按照消息路由规则将消息从发送者传送到目标应用,并提供消息流量控制功能。所以,消息路由有时也称为“流量控制”、“基于内容的路 由”、“智能路由”。
消息QoS机制 服务质量(Quality of Service,简称QoS)是指与用户对服务满意程度相关的各类性能效果。消息QoS机制是指消息中间件提供的消息传送过程当中在性能、安全、可靠性等方面的各类非功能型需求约束。消息中间件一般具备如下几种Qos特性:
服务器
代理化、服务化、流程化、平台化是目前消息中间件发展的主要趋势。代理化是指消息中间件体系架构逐渐向消息代理架构靠拢;服务化是指消息中间件在应用高端 支持面向服务的体系架构;流程化是指消息中间件在应用形态上逐渐与业务流程管理机制相融合,成为企业应用集成中间件的一个核心组成部件;而平台化是指围绕 消息处理,各类应用开发和管理工具与消息中间件有机结合在一块儿,为分布式应用的消息处理提供一个有机的统一平台。网络