MOM(Message Oriented Middleware)是面向消息的
中间件,使用
消息传送提供者来协调消息传送操作。MOM 需要提供
API 和
管理工具。客户端使用api调用,把
消息发送到由提供者管理的目的地。在发送消息之后,客户端会
继续执行其他工作,并且在接收方收到这个消息确认之前,提供者一直保留该消息。
通讯协议、语言、应用程序、硬件和软件平台。时下流行的MOM
中间件产品有
IBM的
MQSeries、 BEA的MessageQ等。
通讯程序可在不同的时间运行:程序不在网络上直接相互通话,而是间接地将消息放入
消息队列,因为程序间没有直接的联系。所以它们不必同时运行。消息放入适当的队列时,
目标程序甚至根本不需要正在运行;即使目标程序在运行,也不意味着要立即处理该消息。
对应用程序的结构没有约束:在复杂的应用场合中,通讯程序之间不仅可以是一对一的关系,还可以进行
一对多和
多对一方式,甚至是上述多种方式的组合。多种通讯方式的构造并没有增加应用程序的复杂性。
程序与网络复杂性相隔离: 程序将消息放入消息队列或从消息队列中取出消息来进行通讯,与此关联的全部活动,比如维护消息队列、
维护程序和队列之间的关系、处理网络的重新启动和在网络中移动消息等是MOM的任务,程序不直接与其它程序通话,并且它们不涉及网络通讯的复杂性。
面向消息的中间件使用
消息传送提供者来协调消息传送操作。MOM(Message-oriented Middleware)系统的基本元素是客户端、消息和MOM提供者,后者包括
API和
管理工具。MOM提供者使用不同的
体系结构路由和传送消息:它可以使用集中式
消息服务器,也可以将路由和传送功能分布在每个客户端上。某些MOM产品结合了这两个方法。
使用MOM系统,客户端可以进行API调用,以便将
消息发送到由提供者管理的目的地。该调用会调用提供者服务以路由和传送消息。在发送消息之后,客户端会
继续执行其他工作,并确信在接收方客户端检索该消息之前,提供者一直保留该消息。基于消息的模型与提供者的协调耦合在一起,使得创建松散耦合的组件系统成为可能。这样的系统可以继续可靠地工作,即使在有个别组件或连接失败时也不会停机。
由
消息传送提供者协调客户端之间的消息传送的另一个优点是:通过添加管理界面,可以监视和调整性能。这样,客户端应用程序便不必关心发送、接收和处理消息之外的任何问题。对于
互操作性、可靠性、安全性、
可伸缩性和性能之类的问题,应当由管理员通过编码实现MOM系统来解决。
至此,我们已经介绍了使用面向消息的
中间件连接
分布式组件的很多优点。下面将介绍其缺点。缺点之一源自松散耦合本身。在RPC系统中,只有在被调用函数完成任务之后,才能返回调用函数。在异步系统中,
调用方客户端会继续为接收方装入工作,直到处理装入工作所需的资源耗尽且被调用组件发生故障。当然,可以通过监视性能和调整消息流来尽量减少或避免这些情况,但对于RPC系统却不必这样做。有一点很重要,那就是了解每种系统的优缺点。每种系统所适合执行的任务都不同。有时,您需要结合两种系统才能完全获得所需的行为。
图1中显示MOM系统如何使两个基于
RPC的系统进行通信。图1的左侧显示在不同的
网络节点上分布客户端、服务器和数据存储库组件以提高性能的
应用程序。这是一个折扣
机票预定系统:
最终用户为使用此服务支付一定的费用,使用该服务可以找到特定目的地和时间的最低费用。数据
存储库保存有关
注册用户和参与此折扣计划的航空公司的信息。服务器上的逻辑功能根据用户的请求在所参与的航空公司中查询价格、对信息进行排序并向用户提供三个
最低报价。对于每个这样的航空公司,数据存储库都将保存有关可用航班的信息(座位、
飞行时间和价格)。服务器组件将更新这些信息以响应最终用户输入的数据。航空公司的服务器还订阅MOM服务,接收折扣预定系统的
信息请求,并返回座位和
价格信息。如果用户决定购买PanWorld航空公司的
折扣机票,则该系统的服务器组件将更新数据存储库中的信息,然后为请求者生成机票或者向折扣服务发送一条消息以生成机票。