【J2EE】企业级项目开发总结--JMS基础篇

时间:2023-02-15 12:02:54

        前面回顾到EJB,说了SessionBeanEntityBean还没提到MessageDrivenBean,我们先了解JMS以后再来谈MessageDrivenBean.下面来看学习和使用JMS必须了解的基础.

 

先看图,宏观了解下各部分之间的关系.


【J2EE】企业级项目开发总结--JMS基础篇

消息中间件:

企业消息传递系统通常被称为消息中间件(Message OrientedMiddleWare),属于消息服务系统.它在客户端之间建立消息通信连接,并维护消息通信的数据,要求客户端使用统一的标准访问消息服务器,J2EE规范中的JMS标准(规范)是应用最广泛的消息接口标准.

 

消息队列:

消息队列QueueJ2EE应用程序之间进行通信和连接的重要方式.它提供了一种多个应用程序之间通信的方式,各个应用程序依赖消息系统发送消息给其它应用程序.在应用程序传送消息的过程中,消息数据被发送到一个消息队列,由消息服务器负责维护,在线传递给连接到消息队列的消息接收方,或者以持久方式保存,在接收方连接到消息服务器时通知接收方.这就是消息队列运行的机制.

 

JMS:

Java MessageServicejava消息服务,它提供标准的产生-发送-接收消息的接口,简化了企业应用的开发.JMS提供的消息服务包括两种机制:

 

1.点对点(Point-to-Point).

消息生产者产生一个消息后,消息被发送到一个队列中,消息接收者从队列中读取,一旦这个消息被一个接收者读取后,消息就在队列中消失了.也就是说,一个消息只能被一个接收者消费,接收者又叫消费者.

 

2.发布-订阅(Publish-Subscribe)

消息生产者产生一个消息后,消息被发送到一个主题队列,这个主题尅同时被多个接收者监听,当一个消息到达主题后,所有消息接收者都会收到这个消息.

 

这二者的主要区别在于:点对点是一对一,发布-订阅是一对多.这个一和多不是消息的生产者和消费者的个数,因为在点对点模型中也可以有多个消费者监听生产者,但一个消息还是只被消费了一次.这一点将会在后面的代码实例中看到.

 

JMS消息中的基本概念:


1.Destination:

生产一个消息后,只需要把这个消息发送到目的地,生产者不用等待消息被处理完成,消费者从目的地接收消息取决于它自身.其实目的地就是队列和主题,它们是支持JMS标准的消息中间件提供者在服务器端维护和管理的资源,这些资源可以被客户端通过JNDI方式查找到,Destination表示这些被管理对象的抽象目的地资源.

 

2.Session:

一个会话是一个单线程的上下文对象,是创建消息生产者和消息消费者的工厂,是创建消息的工厂.

 

3.Connection:

对于连接我们都很熟悉了,这个连接是客户端与JMS提供者之间的连接.服务端java虚拟机通过这样的连接对外提供资源.我们从连接创建Session.

 

4.Message:

一个消息对象装载着一定格式的数据还有与数据相关的属性.是客户端与JMS提供者之间传递的信息.常用的消息类型有TextMessageObjectMessage.

 

5.Message Producer:

客户端产生消息,JMS提供者负责管理消息.消息的生产者可以产生新的消息到队列中.JMS提供的消息服务包括两种机制,所以两种机制的生产者分别叫作TopicPublisherQueueSender,分别通过publish(Message message)send(Messagemessage)方法将消息发送到对应的消息队列.

 

6.Message Consumer:

同理,消息消费者也分为TopicSubscriberQueueReceiver,但都通过Message receive()方法从消息队列接收消息.

 

JMS有了一定的了解之后,我们再分别看看JMS提供消息服务的两种机制下,Message ProducerMessage Consumer如何收发消息.