JMS开发(二):深刻PTP,Pub-Sub两种模式

1.PTP模型

PTP(Point-to-Point)模型是基于队列(Queue)的,对于PTP消息模型而言,它的消息目的是一个消息队列(Queue),消息生产者每次发送消息老是把消息送入消息队列中,消息消费者老是从消息队列中读取消息.先进队列的消息将先被消息消费者读取. 数据库

发送方发消息到队列,接收方从队列接收消息,队列的存在使得消息的异步传输成为可能。和邮件系统中的邮箱同样,队列能够包含各类消息,JMS Provider 提供工具管理队列的建立、删除。JMS PTP 模型定义了客户端如何向队列发送消息,从队列接收消息,浏览队列中的消息.第一节中的代码就是PTP模型的. 服务器

下面的表格中的就是PTP模型的对象的主要概念和方法: 异步

名称 描述
Queue 由JMS Provider 管理,队列由队列名识别,客户端能够经过JNDI 接口用队列名获得一个队列对象.
TemporaryQueue
由QueueConnection 建立,并且只能由建立它的QueueConnection 使用.临时队列.
QueueConnectionFactory
客户端用QueueConnectionFactory 建立QueueConnection 对象.
QueueConnection
一个到JMS PTP provider 的链接,客户端能够用QueueConnection 建立QueueSession 来发送和接收消息.
QueueSession
提供一些方法建立QueueReceiver,QueueSender,QueueBrowser 和TemporaryQueue.若是在QueueSession 关闭时,有一些消息已经被收到,但尚未被签收(acknowledged),那么,当接收者下次链接到相同的队列时,这些消息还会被再次接收.
QueueReceiver
客户端用QueueReceiver 接收队列中的消息,若是用户在QueueReceiver中设定了消息选择条件,那么不符合条件的消息会留在队列中,不会被接收到.
QueueSender
客户端用QueueSender 发送消息到队列
QueueBrowser 
客户端能够QueueBrowser 浏览队列中的消息,但不会收走消息.
QueueRequestor
JMS 提供QueueRequestor 类简化消息的收发过程.QueueRequestor 的构造函数有两个参数:QueueSession 和queue,QueueRequestor 经过建立一个临时队列来完成最终的收发消息请求.
可靠性(Reliability)
队列能够长久地保存消息直到接收者收到消息.接收者不须要由于担忧消息会丢失而时刻和队列保持激活的链接状态,充分体现了异步传输模式的优点.


2.PUB/SUB模型

JMS Pub/Sub 模型定义了如何向一个内容节点发布和订阅消息,这些节点被称做主题(topic).
   主题能够被认为是消息的传输中介,发布者(publisher)发布消息到主题,订阅者(subscribe) 从主题订阅消息.主题使得消息订阅者和消息发布者保持互相独立,不须要接触便可保证消息的传送.
   下面描述JMS Pub/Sub 模型中的主要概念和对象:
订阅(subscription)
消息订阅分为非持久订阅(non-durable subscription)和持久订阅(durable subscrip-tion),非持久订阅只有当客户端处于激活状态,也就是和JMS Provider 保持链接状态才能收到发送到某个主题的消息,而当客户端处于离线状态,这个时间段发到主题的消息将会丢失,永远不会收到.持久订阅时,客户端向JMS 注册一个识别本身身份的ID,当这个客户端处于离线时,JMS Provider 会为这个ID 保存全部发送到主题的消息,当客户再次链接到JMS Provider时,会根据本身的ID 获得全部当本身处于离线时发送到主题的消息.
Topic
主题由JMS Provider 管理,主题由主题名识别,客户端能够经过JNDI 接口用主题名获得一个主题对象.JMS 没有给出主题的组织和层次结构的定义,由JMS Provider 本身定义.
TemporaryTopic
临时主题由TopicConnection建立,并且只能由建立它的TopicConnection使用.临时主题不能提供持久订阅功能.
TopicConnectionFactory
客户端用TopicConnectionFactory建立TopicConnection对象.
TopicConnection
TopicConnection是一个到JMS Pub/Sub provider的链接,客户端能够用TopicConnection建立TopicSession 来发布和订阅消息.
TopicSession
TopicSession 提供一些方法建立TopicPublisher,TopicSubscriber,TemporaryTopic.它还提供unsubscribe方法取消消息的持久订阅.
TopicPublisher
客户端用TopicPublisher 发布消息到主题.
TopicSubscriber
客户端用TopicSubscriber 接收发布到主题上的消息.能够在TopicSubscriber 中设置消息过滤功能,这样,不符合要求的消息不会被接收.
Durable TopicSubscriber
若是一个客户端须要持久订阅消息,可使用Durable TopicSubscriber,TopSession 提供一个方法createDurableSubscriber建立Durable TopicSubscriber 对象.
恢复和从新派送(Recovery and Redelivery)
非持久订阅状态下,不能恢复或从新派送一个未签收的消息.只有持久订阅才能恢复或从新派送一个未签收的消息.
TopicRequestor
JMS 提供TopicRequestor 类简化消息的收发过程.TopicRequestor 的构造函数有两个参数:TopicSession 和topic.TopicRequestor 经过建立一个临时主题来完成最终的发布和接收消息请求.
可靠性(Reliability)
当全部的消息必须被接收,则用持久订阅模式.当丢失消息可以被容忍,则用非持久订阅模式.



综上所述,二者的API接口已经详细的写了出来,做为一个Java合格的开发者,即便不背会这些,也须要理解透彻记住.接着能够看看两种方式的对比: ide

3.JMS规范里的两种message传输方式Topic和Queue,二者的对好比下表:


topic Queue
概要 Pub-Sub(发布/订阅) PTP(点对点)
有无状态 topic数据默认是无状态的. Queue数据是要实际介质保存的,如保存到数据库.
完整性保障 并不保证publisher发布的每条数据,Subscriber都能接受到.
Queue保证每条数据都能被receiver接收.
消息是否会丢失
通常来讲publisher发布消息到某一个topic时,只有正在监听该topic地址的sub可以接收到消息;若是没有sub在监听,该topic就丢失了.
Sender发送消息到目标Queue,receiver能够异步接收这个Queue上的消息.Queue上的消息若是暂时没有receiver来取,也不会丢失.
消息发布接收策略 一对多的消息发布接收策略,监听同一个topic地址的多个sub都能收到publisher发送的消息.Sub接收完通知服务器.
一对一的消息发布接收策略,一个sender发送的消息,只能有一个receiver接收.receiver接收完后,通知服务器已接收,服务器对queue里的消息采起删除或其余操做.

OK,here it is.Over.继续第三章. 函数

相关文章
相关标签/搜索