转载自:http://blog.csdn.net/quincylk/article/details/8643411
JMS介绍
JMS是java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。JMS支持两种消息模型,Point-toPoint(P2P)和Publish/Subscribe(Pub/Sub),即点对点和发布订阅模型
运行的状态:当然,为了缓和这种严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。
如果你希望发送的消息可以不被做任何处理、或者被一个消费者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型
消息的消费:在JMS中,消息的产生和消费是异步的。对于消息来说,JMS的消费者可以通过两种方式 来消费消息。
同步:订阅者或接受者调用receive方法来接受消息,receive方法在能够接收到消息之前(超时之前)将一直阻塞
异步:订阅者或接受者可以注册为一个消息监听器。当消息到达之后,系统自动调用监听器的onMessage方法
JMS编程模型
Connection Factory
创建Cooection对象的工厂,针对两种不同的JMS消息模型,分别有QueueConnectionFactory和TopicConnectionFactory两种。可以通过JNDI来查找ConnectionFactory的对象。
Destination
Destination的意思是消息生产者的消息发送目标或者说是消息消费者的消息来源,对于消息生产者来说,它的Destination是某个队列(Queue)或某个主题(Topic),对于消息消费者来说,它的Destination也是某个队列或主题(即消息来源)。所以,Destination实际上就是两种类型的对象——Queue,Topic。可以通过JNDI来查找Destination
Conneciton
Connection表示客户端和JMS系统之间建立的链接(对TCP/IP socket 的包装)。Connection可以产生一个或多个Session。跟ConnectionFactory一样,Connection也有两种QueueConnection和TopicConnection。
Session
Session使我们操作消息的接口,可以通过session创建生产者、消费者、消息等。Session提供了事务的功能。当我们需要使用session发送/接受多个消息时,可以将这些发送/接受动作放到一个事务中。同样,也分QueueSession和 TopicSession。
消息消费者
消息消费者由Session创建。用于接受被发送到Destination的消息,QueueReceiver和TopicSubscriber,可分别通过session的createReceiver(queue)或createSubscriber(topic)来创建,当然,也可以通过 session的createDurableSubscriber方法来创建持久化的订阅者。
MessageListener
消息监听器,如果注册了消息监听器,一旦消息到达,将自动调用监听器的onMessage方法。EJB中的MDB(Message Driver Bean)就是一种MessageListener。