首页 > 代码库 > Ejb in action(七)——message与JMS

Ejb in action(七)——message与JMS

在我们展开对MDBs的学习之前,我们需要了解message(消息)与JMS(Java Message Service)的概念。我们在Java EE中谈论消息,实际上就是意味着实现一个松耦合的过程,系统组件之间的异步通信。

在开发中,许多组件之间的调用都是同步的,像简单的方法调用、Java的RMI等。而此处的异步调用区别于此。在很多时候,使用异步消息能够提高用户体验。


拿CSDN的注册功能来举例:用户点击注册之后,这时客户端向服务器发送一个请求,服务器进行处理后,将注册成功的提示消息返回给客户,同时,向用户的邮箱发送了一封邮件。是不是等邮件发送成功、用户收到邮件之后,再向用户显示注册成功呢?

当然不会这样,因为用户体验将会很差。所以将结果直接返回给用户,将用户注册的信息通过消息发送给后端程序慢慢处理。

消息

消息是JMS的核心概念,JMS客户端和JMS服务提供者通过消息来进行通信。

企业消息不是一种新的概念,和消息相关的产品已经有多年的历史,比如IBM MQSeries,Microsoft的MSMQ,JBoss MQ 和 Apache的 ActiveMQ等。企业消息系统使用松耦合的方式集成应用程序,在存储和转发的基础上支持应用程序间数据的异步传递;各种应用程序只要和消息服务器(消息中间件,MOM)打交道就可以实现相互通信。


使用消息系统有一下优点:

1、平台无关性;

2、和网络位置无关;

3、在不同类型的网络环境下互操作性良好;

4、具有良好的扩展性和良好的伸缩性。


JMS

JMS(Java Message Service) 即Java消息服务。它提供标准的产生、发送、接收消息的接口,简化企业应用的开发。JMS是一种企业消息传送的API,并不是MOM消息中间件系统的全部,JMS也是一种规范,类似于JDBC,我们通JMS API访问 JMS的服务器。

大致由三部分组成:1、消息发送端;2、中间件服务器;3、消息接收端三个组件。

Java消息服务器是指,将数据通过消息作为载体在网络中从一个系统异步传送给另一个系统。这样的异步消息传送意味着:发送者不需要等待接收者接收或处理该消息;它可以自由地发送消息并持续进行处理。这样一个异步式的架构主要依赖于一台消息服务器(message server)。消息服务器,也称为消息路由器(message router)或代理(broker),它负责从一个消息传送客户端向其他消息传送客户端传送消息。


JMS支持两种消息通信模型,分别是著名的点到点(point-to-point)(P2P)模型和著名的发布/订阅(Pub/Sub)模型。

P2P与Pub/Sub的简单对比:


P2P 模型规定了一个消息只能有一个接收者;

Pub/Sub 模型允许一个消息可以有多个接收者。


对于点到点模型,消息生产者产生一个消息后,把这个消息发送到一个Queue(队列)中,然后消息接收者再从这个Queue中读取,一旦这个消息被一个接收者读取之后,它就在这个Queue中消失了,所以一个消息只能被一个接收者消费。

与点到点模型不同,发布/订阅模型中,消息生产者产生一个消息后,把这个消息发送到一个Topic中,这个Topic可以同时有多个接收者在监听,当一个消息到达这个Topic之后,所有消息接收者都会收到这个消息。

关于点到点模型与发布/订阅模型的具体内容,我会安排在下一篇文章中进行介绍。