一 JMS消息传递模型
1 点对点消息模型(p2p)
点对点消息模型既支持 异步“即发即弃”的消息传送方式,也支持同步的“请求响应”的消息传送方式。
点对点消息模型的特点:
• 消息通过一个名为消息队列的虚拟通道来交换消息。队列即是消息生产者发送消息的目的地,也是消息消费者获取消息的消息源。
• 每一条消息只能传送给一个接受者,可能会有多个接收者在一个队列侦听,但是每个消息队列中的消息只能被一个接受者所消费
• 消息队列中的消息是由先后顺序的。先进入队列的会优先被消费,除非使用了消息优先级。
• 消费者和生产者之间没有耦合。消费者和生产者可以在运行时动态的添加,这使得系统的发杂性可以随着时间的增长而降低。
即发即弃模型是指:消息生产者向某个队列发送一条消息,他不会期望得到消息消费者的一个响应(至少不是立刻得到响应)。就像某些动物,交配完了就跑了,不需要后果,也不想知道后果。:-D
请求应答模型是指:消息生产者向请求队列发送一条消息后,他就阻塞等待(blocking wait)应答队列,而应答队列正在等待来自接受者的响应。 需要注意的是,可能有好多消息生产者发送消息到请求队列,好多接受者在应答,如何确定给我回应的就是我问的那个问题呢,这个需要用到消息关联了。具体来说需要用到JMSCorrelationID消息头属性和JMSMessageID消息头属性。JMSMessageID是唯一的。
即发即弃模型:
请求响应模型:
2 发布订阅消息模型
发布订阅消息的特点:
· 信息通过一个成为主题(topic)的虚拟通道交换
· 每条消息都会传送给多个称为订阅者的消费者。订阅者有许多类型,包括持久订阅者、非持久订阅者、动态订阅者。
· 发布者通常不会意识到有多少个订阅者在接收主题消息
· 消息被推送给消费者,这意味着消息会传给消费者,而无需消费者去请求。
· 生产者和消费者之间没有耦合,订阅者和发布者可以动态的添加。
· 订阅一个主题的每个客户端都会受到发布该主题的副本。发布者生产的一条消息可以被复制并分发给成千上万的订阅者
发布订阅模型
持久订阅者和非持久订阅者
很简单,持久订阅者其实就是在和消息服务器建立连接的时候通知它,发布者发布的消息我是一条也不能漏的,无论有没有和消息服务器建立。即使没有连接,当和服务器建立连接的时候,依然收到消息。就像qq消息似的,即使离线,当上线的时候还是会收到好友发的消息的。
非持久订阅者只有在和消息服务器建立连接的时候才能收到消息,如果离线后,发布者再发布的消息对于非持久订阅者来说是收不到的。
其实持久订阅者是在和服务器建立连接的时候让消息服务器对它产生记忆,以后来了什么消息都给它保留着。如果取消持久订阅,就要通知消息服务器,让他把对我的记忆擦出吧。忘掉我吧!