保证主题,JMS规范和ActiveMQ的消息传递

最近,一个客户要求我仔细研究ActiveMQ的“持久”消息的实现,它如何应用于主题以及在存在非持久订阅者的故障转移方案中会发生什么。

我已经了解到,JMS语义规定,即使面对消息代理提供者失败,也只能保证主题的持久订户以持久传递模式传递消息。 但是对于持久消息的非持久订户,该怎么说呢? 没有持久订阅者时发送“持久”消息有什么意义?

在查看规范的确切措辞后,我有点不确定。 因此,我查阅了Java消息服务书(Richards,Monson-Haefel和Chappell),以获取有关保证消息传递的更多讨论,并查阅ActiveMQ源代码,并与我的一些同事进行了咨询。

首先,让我们看一下规格说明:

根据JMS规范的第4.10节:

大多数客户应使用产生PERSISTENT消息的生产者。 这样可以确保从队列或持久订阅中传递的消息仅一次传递一次。

很清楚吧? 使用持久消息传递可确保队列或持久预订的消息传递。

从第6.12节开始:

不可持久订户的未确认消息应该能够在该不可持久订户的生命周期中恢复。

因此,现在应该能够恢复非持久订户的未经确认的消息吗? 我猜是“在那个非持久订户的一生中”

但后来成为6.12的一部分:

只有持久订阅才能可靠地恢复未确认的消息。

和…

为了确保传递,TopicSubscriber应该建立持久订阅。

尽管规范非常清楚地表明(只有效果),只有队列和持久订户才能利用存储转发保证的交付,但是我猜我对“非持久订户应该能够在非持久性订户的生命周期内恢复”

  • 是否根据主题的使用者更改主题的持久性协议(只有在经纪人保留消息并向生产者发送确认后,消息才被视为经纪人的责任)?
  • 即使经纪人倒闭,这也意味着吗? 还是考虑了经纪人的失败以及非耐久潜艇的订购期限?
  • 当存在用于持久性,非持久性主题的代理网络时,ActiveMQ会发生什么? 如果网络中的代理失败,消息会丢失吗?
  • 向具有非持久订阅者的主题发送消息“持久”与“非持久”之间的确切区别是什么?

这是保证交付讨论中必须考虑的两个部分。 发布者向代理发送消息的位置,以及消费者从代理接收消息的时间。 对于持久性消息,该协议仅在将消息持久化到存储后才允许发送方发送消息,并且代理使消息能够确认。 另一方面,消费者必须在经纪人传递消息后确认该消息,说“嘿,我现在将对此消息负责”。 只有这样,经纪人才会放弃责任并将其从其商店中删除。  

协议是否根据主题的使用者而改变?

因此,对于发送到某个主题的持久消息(目前未考虑任何消费者),规范是否说明在代理发回其确认之前是否应该存储该消息? 不,不是。 它由有关的JMS代理的实现者来决定。 对于ActiveMQ,如果某个主题上只有非持久订阅,它将不会保留该消息。

协议的同步性质不会改变,即,如果消息是持久发送的,则会话将认为与代理的交换是同步的,并且它将在继续之前等待代理的响应,但代理不会实际保留消息。 在ActiveMQ中,如果至少有一个持久订户,则此情况会更改。 然后,代理将按照JMS规范保留消息。  

这是否意味着即使发生经纪人失败?

如果代理失败,则非持久订阅的生存期确实会中断。 因此,在代理失败(或该非持久子项的任何其他终止)的情况下,即使将消息持久发送,也不会将其传递给该非持久订户。 此外,面对代理的非持久订阅失败,将不会重新发送消息。  

在经纪人网络中会发生什么?

消息确实可能丢失。 考虑这个经纪人网络,其中A-> B-> C和订阅是从C-> B-> A转发的。因此,如果我们在A处有一个生产者,生产的主题为“ topic.foo”,而一个非耐用的消费者如果代理B在代理C上从“ topic.foo”消耗,则如果代理B发生故障,此后发送到A的消息将被丢弃。 据A所知,订阅的生存期已终止。

最后,  

向具有非持久订阅者的主题发送消息“持久”与“非持久”之间的确切区别是什么?

根据JMS规范:

出版方式 非持久订户 耐用的订户
非持久 最多一次(如果不活动则丢失) 最多一次
持久性 一次仅一次(如果不活动则丢失) 一次一次

因此,对于非持久性订户,非持久性消息将“​​最多”传递一次,但如果处于非活动状态(或代理失败)则将丢失。

对于非持久性订户,持久消息将“一次且仅发送一次”,但如果不活动则丢失。 规范的“非活动”部分实际上意味着,如果没有持久的主题订阅者,则消息可能会丢失,并且无论消息是持久发送还是非持久发送,都无法保证传递。

参考: Christian Posta软件博客上来自JCG合作伙伴 Christian Posta的主题,JMS规范和ActiveMQ的有保证的消息传递 。


翻译自: https://www.javacodegeeks.com/2012/08/guaranteed-messaging-for-topics-jms.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371460.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中的除法及求余运算特殊性。

1.如果除法运算符的两个操作数都是整数类型,则计算结果也是整数,就是将自然除法的结果截断取整,例如19/4的结果是4,而不是5。并且除数不能0,否则将引起除0异常 2.如果运算符的两个操作数有1个是浮点数,或两…

林海峰老师python课件密码

egon4573转载于:https://www.cnblogs.com/fengjunhua/p/7395591.html

国际旅游管理专业跨专业考计算机,旅游管理考研我想跨专业考旅游管理专业的研究 – 手机爱问...

2005-12-11我是学旅游管理的大一学生,听人说这专业就这位兄弟提出的苦恼在大学生中很典型呀!其实你说的不尽然!旅游管理专业,是个很有前景的专业呀!怎么会没有前途呀?你对自己的人生也太悲观了吧?就是你说,学校不太好,这可能对自身在大学四年的发展有所限制,但这主要还是看自…

Java注释:探究和解释

Java 5 SE的许多出色功能之一是Annotations构造的引入。 注释是一些标签,我们可以将其插入程序源代码中,以使用某种工具对其进行处理并使其变得有意义。 注释处理工具通常使用(Java 5 SE的)Reflection API在Java代码或字节码级别的…

C# 类

一 string 类型 变量.Length - 字符串长度,返回int类型 string s "abcdefg"; int a s . Length; Console.WriteLine(a); // 输出结果为:7(此字符串有7个字符) // Length返回有多少个字符&am…

node+mongodb+win7

一、安装mongodb,参照教程,注意要先启动mongod.exe,再启动mongd.exe。 转载于:https://www.cnblogs.com/iloveyou-sky/p/7396997.html

cdrom是多媒体微型计算机,全国计算机二级题库第三章

同时按下CTRLALTDEL组合键的作用是(使用任务管理器关闭不响应的应用程序下列说法正确的是(在微型机性能指标中,CPU的主频越离,其运算速度越快)微型计算机键盘上的Tab键是(交替换档键)微型计算机键盘上的Enter键是(回车键)微型计算机的运行速度的单位是mi…

Spring MVC控制器JUnit测试

JUnit测试Spring MVC控制器并非易事 。 但是最近,一个新项目 (即将在Spring推出)提供了新工具来简化此工作。 这篇文章说明了如何通过JUnit测试来测试一个简单的控制器。 该代码是JUnit Testing Spring Service和DAO(带有内存数据…

java基础03变量和基本数据类型

package cn.bdqn.test;/*** * author 小豆腐* * 变量:会变化的量??* 一个数据在内存中存储空间的表示!在运行期间可以动态改变!* * 关键字:在java中已经被使用或者定义的单词!不能作为变量名&#xff01…

5.set集合

list_1 [1,2,3,4,5]list_2 [1,3,5,7,9]#列表转成set集合set_1 set(list_1)set_2 set(list_2)#交集print(set_1.intersection(set_2))print(set_1 & set_2)#判断没有交集print(set(["a","b"]).isdisjoint(set_1))#并集print(set_1.union(set_2))pri…

JavaFX中基于表达式的PathTransitions

在JavaFX中,您可以使用PathTransition对象为路径上的节点设置动画。 PathTransitions使用Shape对象描述它们需要沿其动画的路径。 JavaFX提供了各种类型的形状(例如,多边形,圆形,多边形,路径)。…

html 显示视频列表,dvd光碟制作节目轨菜单布局,不要视频缩略图,只显示文件列表...

“如何在刻录视频光盘时自定义制作菜单?实现的效果就是当光盘插入DVD影碟机播放时,首先会出现一个所有视频文件列表的菜单(节目轨菜单),就相似于音乐CD曲目表一样,不需要有视频缩略图,可通过遥控器选择性播放列表中某一…

v3学院教你学习-task和function的异同

v3学院教你学习-task和function的异同 task(任务)与function(函数)的不同 任务与函数主要有以下四点不同: l 函数只能与主模块共用一个仿真时间单位,而任务定义自己的仿真时间单位。 l 函数不能启动任务&am…

Spring事件的观察者模式

介绍 观察者模式的本质是“定义对象之间的一对多依赖关系,以便当一个对象改变状态时,其所有依赖关系都会得到通知并自动更新。” GoF。 观察者模式是发布/订阅模式的子集,它允许许多观察者对象查看事件。 可以在不同的情况下使用此模式&#…

jQuery选择什么版本 1.x? 2.x? 3.x?

目前jQuery有三个大版本: 1.x:兼容ie678,使用最为广泛的,官方只做BUG维护,功能不再新增。因此一般项目来说,使用1.x版本就可以了,最终版本:1.12.4 (2016年5月20日)2.x:不兼容ie678&a…

Delta DVP 系列 PLC 各装置 Modbus 地址

此Modbus地址表以 1 为基础地址 Device Range Type DVP address (Hex) Modbus address (Dec) Effective ES/EX/SS SA/SX/SC EH S 000~255 bit 0000~00FF 000001~000256 0~127 0~1024 0~1024 S 256~511 bit 0100~01FF 000247~000512 S 512~767 bit 020…

Reporting Service 2008 “报表服务器数据库内出错。此错误可能是因连接失败、超时或数据库中磁盘空间不足而导致的”...

今天遇到了两个关于Reporting Service的问题, 出现问题的环境为Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) 。具体情况请见下面描述。 1:在修改报表的订阅后,保存时出现下面错误: 提示:报表服务器数据库…

Java 7:HashMap与ConcurrentHashMap

从我过去有关性能的文章和HashMap案例研究中可能已经看到,Java线程安全性问题可以很轻松地使Java EE应用程序和Java EE容器崩溃。 在对Java EE性能问题进行故障排除时,我观察到的最常见问题之一是由非线程安全的HashMap get()和pu…

计算机网络按信息传输介质的性能来划分,大学计算机基础练习题网络技术.doc...

网络技术一、单选:1. 在计算机网络中,表征数据传输可靠性的指标是( )。A?误码率 B?频带利用率C?信道容量 D?传输速率参考答案:A2. 和通信网络相比,计算机网络最本质的功能是( )。A?数据通信 B?资源共享C?提高计算机的可靠性…

【2017-03-02】集合、结构体、枚举

集合和数组的差别: 数组:同一类型,固定长度集合:不同类型,不固定长度 一、普通集合(弱类型) 1、ArryList 使用集合首先要引用命名空间。 或者在ArryList上右键找“解析”。 2、集合的定义&#…