2.2 什么是面向消息的中间件

对于在一个松耦合的、可靠的、可伸缩的、安全的分布式应用程序或系统中提供通信的一类软件,面向消息中间件(MOM)是最好的称呼。分布式计算的世界中,面向消息中间件是一个非常重要的概念。它们让使用各种供应商提供的不同api的应用程序间的通信成为可能,并开始处理在企业消息传递领域的许多问题。

MOM的核心理念是,充当一个消息发送者和消息接收者之间的中介。该中介提供全新水平的松耦合。图2.3演示了如何使用一个MOM在每个应用程序和主机之间,甚至应用程序到应用程序间调解连接和消息传递。

java SSE 消息_API

在高层上,消息是通过MOM从一个应用程序发送到另一个的业务信息单元。应用程序通过MOM使用所谓的目标(destinations)发送和接收消息。消息被定位、传输到已连接或订阅目标的接收器。因为没有要求每个连接到MOM的应用程序同时发送和接收消息,这种机制实现了发送方和接收方之间的松耦合。发送方对接收方一无所知,反之亦然。这称为异步消息传递。

MOM为企业消息传递提供了先前紧耦合系统中不可能实现的附加功能——如消息持久性,在缓慢或不可靠连接下的良好沟通能力,复杂消息路由,消息转换等等。消息持久性有助于解决由发送方和接收方造成的连接不畅的情况下的消息传递,以及接收方单纯接收失败的时候,确保不会影响到发送方的状态。复杂消息路由提供了丰富的可能性,包括向多个接收器提供单条消息,基于属性或消息内容的消息路由等等。消息转换允许两个使用不同消息格式的应用程序通过一个自定义消息格式的快速转换实现沟通。

此外,当今市面上很多MOM都为连接提供了一个丰富的协议集合。普遍支持的协议包括HTTP/S,multicast,SSL,TCP/IP,UDP等等。一些厂商甚至提供支持多种语言,进一步扩大了MOM的应用环境。而ActiveMQ提供了比上述更加丰富的功能。

典型的MOM还提供一个API与其他MOM发送和接收消息以及进行其他互动。多年来,所有MOM供应商为他们选择的语言提供自己的专用API。Java消息服务(JMS)也是如此。

2.3 什么是java消息服务(Java Message Service)?

Java消息服务(JMS)为企业消息传递提供的API不同于以往以供应商为中心(vender-centric)的MOM的API。JMS旨在使用Java编程语言提供一个标准化的独立于供应商(vendor-neutral)的API来发送和接收消息。JMS API尽量使Java程序员在没有多少企业消息传递知识的情况下也能开发复杂的消息传递应用程序,同时仍然保持一定量的各供应商的JMS实现之间的可移植性。

JMS本身不是一个MOM。它是一个抽象了消息传递客户端和MOM之间交互行为的API,就像JDBC抽象了关系数据库间的通信一样。图2.4显示了在高层次上,JMS API如何使消息传递客户端与供应商特定MOM进行交互。JMS API 降低了企业消息传递应用程序的开发门槛。它还加强了JMS供应商间的可移植性。

java SSE 消息_应用程序_02

JMS规范的第一个版本在1998年发布,最初由Sun与企业消息传递行业内的一些公司共同合作完成。最新版本发布于2002年,做出了一些必要的改进。JMS 1.1版本统一了使用在两个消息传递域的两套API,所以现在在两个消息传递领域只需要一个通用的API就够了。这对API是一个极大的改进,但仍具有向后兼容性。

在标准化API的过程中,JMS正式定义了消息传递领域的许多概念和产品:

■JMS 客户端(JMS client) ——使用100%纯Java编写的应用程序来发送和接收消息。

■非JMS 客户端 (Non-JMS client)  ——使用JMS提供者的本地客户端API编写的应用程序来发送和接收消息,而不是JMS。

■JMS 生产者(JMS producer) ——创建和发送JMS消息的客户端应用程序。

■JMS 消费者(JMS consumer) ——接收并处理JMS消息的客户端应用程序。

■JMS 提供者(JMS provider) ——JMS接口的实现,理想情况下用100%纯Java编写。

■JMS 消息(JMS message) ——JMS最基本的概念;通过JMS客户端发送和接收。

■JMS 领域(JMS domains) ——消息传递的两种方式,包括点对点(point-to-point)和发布/订阅(publish/subscribe)。

■受管理对象(Administered objects) ——供客户端使用的预配置JMS对象,包含供应商特定配置数据。这些对象通常由客户端通过JNDI访问。

■连接工厂(Connection factory) ——客户端使用连接工厂创建到JMS提供者的连接。

■目标(Destination) ——一个对象,是消息发送的目标,也是来源。

除此之外,还有其他重要的概念。

接下来的几个部分将深入研究这些概念并且专注于描述这些JMS构件。