JMS学习六(ActiveMQ消息传送模型)

ActiveMQ 支持两种截然不同的消息传送模型:PTP(即点对点模型)和Pub/Sub(即发布 /订阅模型),分别称作:PTP Domain 和Pub/Sub Domain。

一、PTP消息传送模型

1、PTP(使用Queue 即队列目标) 消息从一个生产者传送至一个消费者。在此传送模型中,目标是一个队列。消息首先被传送至队列目标,然后根据队列传送策略,从该队列将消息传送至向此队列进行注册的某一个消费者,一次只传送一条消息。可以向队列目标发送消息的生产者的数量没有限制,但每条消息只能发送至、并由一个消费者成功使用。如果没有已经向队列目标注册的消费者,队列将保留它收到的消息,并在某个消费者向该队列进行注册时将消息传送给该消费者。

2、PTP消息传送模型特性:

(1)、如果在session关闭时,有一些消息已经被收到但还没有签收那么当消费者下次连接到相同的队列时,这些消息还会被再次推送。(消息的被消费是分三个阶段的,不满足任何一个都会被视为未消费)

(2)、在上篇文章中我们学习了消息过滤器,如果消息不满足消费条件则这些消息是不会被消费的,这些消息会留在队列中。

(3)、队列可以长久的保存消息直到有消费者来消费消息,消费者不需要关心消息生产者的连接状态,这充分体现了异步传输的优势!

二、Pub/Sub消息传送模型(发送/订阅模型)----不支持负载均衡

1、Pub/Sub(使用 Topic即主题目标) 消息从一个生产者传送至任意数量的消费者。在此传送模型中,目标是一个主题。消息首先被传送至主题目标,然后传送至所有已订阅此主题的活动消费者。可以向主题目标发送消息的生产者的数量没有限制,并且每个消息可以发送至任意数量的订阅消费者。主题目标也支持持久订阅的概念。持久订阅表示消费者已向主题目标进行注册,但在消息传送时此消费者可以处于非活动状态。当此消费者再次处于活动状态时,它将接收此信息。如果没有已经向主题目标注册的消费者,主题不保留其接收到的消息,除非有非活动消费者注册了持久订阅。

2、Pub/Sub消息传送模型特性:

(1)、消息的订阅分为非持久订阅和持久订阅,非持久订阅,只有当客户端(消息消费者)处于激活状态时也就是消息消费者和消息服务保持连接状态时才能收到发送到某个Topic(主题)的消息,而当消息消费者处于离线状态时发到主题的消息将会丢失,永远不会收到。持久订阅能接收到消息消费者和消息服务端断开期间发送到某个Topic(主题)

的消息即消息消费者在次连接到消息服务时能收到这期间发送的消息。

(2)、和PTP模式一样,在消费消息时有选择器,不满足条件的消息时不会被消费,不消费的消息还是留在了Topic(主题)中。

(3)、非持久订阅状态下,不能恢复或重新派送一个未签收的消息,只有持久订阅才能恢复或重新派送一个未消费的消息。

(4)、在应用中不能容忍有消息丢失则使用持久订阅,而如果能容忍消息丢失则使用费持久订阅,持久订阅和非持久订阅两个的性能还是有很大的却别的,因为要持久订阅的话第一个要求就是消息要持久化,而非持久订阅则不用进行消息的持久化所以效率较高,所以在应用中使用哪种订阅方式还是要慎重,三思!!!

三、实例

在这里就不贴代码了因为在第二篇文章中已经写了两种传送模式的demo如果需要可以看看:PTP、Pub/Sub 传送模型文章

JMS学习六(ActiveMQ消息传送模型)相关推荐

  1. 【转】ActiveMQ消息传送机制以及ACK机制详解

    2019独角兽企业重金招聘Python工程师标准>>> 本文转载自 http://shift-alt-ctrl.iteye.com/blog/2020182 AcitveMQ是作为一 ...

  2. ActiveMQ消息传送机制以及ACK机制详解

    2019独角兽企业重金招聘Python工程师标准>>> AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全 ...

  3. JMS学习十 ActiveMQ支持的传输协议

    JMS学习(ActiveMQ支持的传输协议) ActiveMQ提供了一种连接机制,这种连接机制使用传输连接器(TransportConnector)实现客户端与代理(client - to - bro ...

  4. JMS学习(六)--提高非持久订阅者的可靠性 以及 订阅恢复策略

    一,非持久订阅者 和 实时消费消息 在这篇文章中区分了Domain为Pub/Sub.Destination为Topic时,消费者有两种:持久订阅者 和 非持久订阅者. 对于持久订阅者而言,只要订阅了某 ...

  5. JMS学习(3):--ActiveMQ简单的HelloWorld实例

    第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文深入 ...

  6. JMS学习(2):ActiveMQ简单介绍以及安装

    现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的. 上篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了消息通信的规范JM ...

  7. JMS学习(五)--ActiveMQ中的消息的持久化和非持久化 以及 持久订阅者 和 非持久订阅者之间的区别与联系...

    一,消息的持久化和非持久化 ①DeliveryMode 这是传输模式.ActiveMQ支持两种传输模式:持久传输和非持久传输(persistent and non-persistent deliver ...

  8. JMS学习九 ActiveMQ的消息持久化到Mysql数据库

    1.将连接Mysql数据库驱动包,放到ActiveMQ的lib目录下 2,修改ActiveMQ的conf目录下的active.xml文件,修改数据持久化的方式 2.1  修改原来的kshadb的持久化 ...

  9. JMS学习十一 ActiveMQ Consumer高级特性之独有消费者(Exclusive Consumer)

    一.简介 Queue中的消息是按照顺序被分发到consumers的.然而,当你有多个consumers同时从相同的queue中提取消息时, 你将失去这个保证.因为这些消息是被多个线程并发的处理.有的时 ...

最新文章

  1. 深入理解 Android Https
  2. MVC中注册路由及其路由的设置
  3. 【Python教程】删除字符串中字符的四种方法
  4. 混合编程黑科技:跨语言编程问题迎刃而解的3个要点
  5. Oracle发布开源的轻量级 Java 微服务框架 Helidon 1
  6. vuejs兄弟组件之间的通信
  7. Jmeter逻辑控制器-ForEach Controller
  8. 数据库MySQL的运行情况主要是检查什么_mysql 运行状态分析 运行故障排查实例
  9. 部署Vista需要了解的十大事项
  10. 黑马day15作业2,3
  11. 1、解读中台 -- 什么是中台
  12. Server 2008系统安装驱动提示“无法验驱动程序数字签名”怎么办?
  13. linux cp指令:略过目录 问题解决
  14. 0基础能学“软件测试”吗?好学吗?怎么学?
  15. WM_CHAR,WM_UNICHAR,WM_IME_CHAR
  16. 冯·诺依曼体系结构 -- 理解
  17. python卷积神经网络图像,python卷积神经网络代码
  18. 拖拽功能之水平拖动图片
  19. 卷闸门433遥控钥匙对拷方法
  20. 英文面试:期望薪水篇

热门文章

  1. 【OpenCV 例程200篇】91. 高斯噪声、瑞利噪声、爱尔兰噪声
  2. Mac下配置sublime实现LaTeX
  3. 国产自主可控的代码自动生成工具SkyEye
  4. java 把图片插入窗体,JAVA JFrame窗体添加背景图像的两种方法
  5. C/C++混淆点-与
  6. pymysql.err.InternalError: (1054, Unknown column '27D24A3B' in 'where clause')之错误解决
  7. HGOI20190707 题解
  8. 英语初级学习系列-00-Name-介绍自己
  9. webpack之font-awesome
  10. C/C++02: Josephus问题