本文转载自:http://blog.csdn.net/jiuqiyuliang/article/details/46701559java
摘要:The Java Message Service (JMS) API is a messaging standard that allows application components based on the Java Platform Enterprise Edition (Java EE) to create, send, receive, and read messages. It enables distributed communication that is loosely coupled, reliable, and asynchronous.编程
JMS(JAVA Message Service,java消息服务)API是一个消息服务的标准或者说是规范,容许应用程序组件基于JavaEE平台建立、发送、接收和读取消息。它使分布式通讯耦合度更低,消息服务更加可靠以及异步性。服务器
这篇博文咱们主要介绍J2EE中的一个重要规范JMS,由于这个规范在企业中的应用十分的普遍,也比较重要,咱们主要介绍JMS的基本概念和它的模式,消息的消费以及JMS编程步骤。session
基本概念app
JMS是java的消息服务,JMS的客户端之间能够经过JMS服务进行异步的消息传输。异步
消息模型socket
○ Point-to-Point(P2P) ○ Publish/Subscribe(Pub/Sub)
即点对点和发布订阅模型async
P2P分布式
P2P的特色.net
若是你但愿发送的每一个消息都应该被成功处理的话,那么你须要P2P模式。
Pub/Sub
Pub/Sub的特色
若是你但愿发送的消息能够不被作任何处理、或者被一个消息者处理、或者能够被多个消费者处理的话,那么能够采用Pub/Sub模型
消息的消费
在JMS中,消息的产生和消息是异步的。对于消费来讲,JMS的消息者能够经过两种方式来消费消息。
○ 同步
订阅者或接收者调用receive方法来接收消息,receive方法在可以接收到消息以前(或超时以前)将一直阻塞
○ 异步
订阅者或接收者能够注册为一个消息监听器。当消息到达以后,系统自动调用监听器的onMessage方法。
JMS编程模型
(1) ConnectionFactory
建立Connection对象的工厂,针对两种不一样的jms消息模型,分别有QueueConnectionFactory和TopicConnectionFactory两种。能够经过JNDI来查找ConnectionFactory对象。
(2) Destination
Destination的意思是消息生产者的消息发送目标或者说消息消费者的消息来源。对于消息生产者来讲,它的Destination是某个队列(Queue)或某个主题(Topic);对于消息消费者来讲,它的Destination也是某个队列或主题(即消息来源)。
因此,Destination实际上就是两种类型的对象:Queue、Topic能够经过JNDI来查找Destination。
(3) Connection
Connection表示在客户端和JMS系统之间创建的连接(对TCP/IP socket的包装)。Connection能够产生一个或多个Session。跟ConnectionFactory同样,Connection也有两种类型:QueueConnection和TopicConnection。
(4) Session
Session是咱们操做消息的接口。能够经过session建立生产者、消费者、消息等。Session提供了事务的功能。当咱们须要使用session发送/接收多个消息时,能够将这些发送/接收动做放到一个事务中。一样,也分QueueSession和TopicSession。
(5) 消息的生产者
消息生产者由Session建立,并用于将消息发送到Destination。一样,消息生产者分两种类型:QueueSender和TopicPublisher。能够调用消息生产者的方法(send或publish方法)发送消息。
(6) 消息消费者
消息消费者由Session建立,用于接收被发送到Destination的消息。两种类型:QueueReceiver和TopicSubscriber。可分别经过session的createReceiver(Queue)或createSubscriber(Topic)来建立。固然,也能够session的creatDurableSubscriber方法来建立持久化的订阅者。
(7) MessageListener
消息监听器。若是注册了消息监听器,一旦消息到达,将自动调用监听器的onMessage方法。EJB中的MDB(Message-Driven Bean)就是一种MessageListener。
企业消息系统的好处
咱们先来看看下图,应用程序A将Message发送到服务器上,而后应用程序B从服务器中接收A发来的消息,经过这个图咱们一块儿来分析一下JMS的好处:
对于JMS的基本概念咱们就介绍这么多,下篇博文介绍一种JMS的实现。