JMS学习(六)--提高非持久订阅者的可靠性 以及 订阅恢复策略
一,非持久订阅者 和 实时消费消息
在这篇文章中区分了Domain为Pub/Sub、Destination为Topic时,消费者有两种:持久订阅者 和 非持久订阅者。
对于持久订阅者而言,只要订阅了某个Topic,就不用担心自己“离线”(inactive)后,错过某些消息。
但是对于非持久订阅者:①生产者发送了若干个消息到Topic后,非持久订阅者才去订阅该Topic,则它会错过(收不到)在它订阅之前发送的消息。
②生产者向Topic发送了若干个消息,而此时因网络中断原因或者非持久订阅者宕机时,非持久订阅者刚好不在线(inactive),就会错过(收不到)生产者发送的消息。
③从消息的角度而言,有些消息是实时消息(如,实时股票价格),需要快速地消费掉,对消息进行持久化就没有太大的意义,而且会因为存储消息而造成一定的开销。
因此,为了提高非持久订阅者的可靠性,以及实时的消费消息,就需要:❶消息不进行持久化并缓存消息(Caching message for nondurable consumers);❷对缓存的消息的消费策略
二,Retroactive Consumers
什么是Retroactive Consumer呢?
Retroactive Consumer属于非持久订阅者,但它是消费 非持久化消息 的订阅者。(其他非持久订阅者 可以消费持久化消息)
The ActiveMQ message broker caches messages in memory for every topic that is used.
The only types of topics that are not supported are temporary topics and ActiveMQ advisory topics.
Messages that are cached by the broker are only dispatched to a topic consumer if it is retroactive;and never to durable topic subscribers.
①ActiveMQ Broker可以为各种Topic缓存消息(但不支持 temporary topic 和 advisory topic)。这说明:该机制只针对Topic而言。
②缓存的消息只会发给 retroactive consumer,并不会发送给持久订阅者。
那非持久订阅者如何成为 retroactive consumer呢?最简单的方式是在创建Topic的时候指定consumer为retroactive
Topic topic = session.createTopic("soccer.division1.leeds?consumer.retroactive=true");
MessageConsumer consumer = session.createConsumer(topic);
三,消息“订阅恢复策略”(Subscription Recovery Policies)
正因为 retroactive consumer 消费的是非持久化的消息(消息保存在内存中),所以就会出现 第一部分中提到的这两个问题:
①生产者发送了若干个消息到Topic后,非持久订阅者才去订阅该Topic,则它会错过(收不到)在它订阅之前发送的消息。
②生产者向Topic发送了若干个消息,而此时因网络中断原因或者非持久订阅者宕机时,非持久订阅者刚好不在线(inactive),就会错过(收不到)生产者发送的消息。
就需要:订阅恢复策略。订阅恢复策略的目的就是让retroactive consumer能够回到过去某个时间点消费它错过了的消息。
比如说:生产者发送了消息A,消息B给Broker的Topic之后,retroactive consumer才订阅该Topic,订阅恢复策略就可以让retroactive consumer能收到在它订阅之前就已经发送的消息(消息A 和消息B)
订阅恢复策略主要有以下几类,简要介绍如下:(具体的配置参数可参考官网)
1)FixedSizedSubscriptionRecoveryPolicy
这是ActiveMQ默认的策略。该恢复订阅策略最大的特点是:开辟多大的内存缓存发送到该Topic的消息。
2)Fixed Count Subscription Recovery Policy
按照数量来缓存消息。即,允许Topic最大缓存多少条消息。举例如下:
假设设置的Topic最大可缓存1000条消息。当前Topic已经缓存了500条消息了,retroactive consumer在 收到了一些消息之后宕机了,在宕机这段时间内,生产者又向Topic发送了100条消息。那么当retroactive consumer恢复正常后,生产者又向Topic发送了200条消息,那么:retroactive consumer 首先会收到它宕机期间错过的100条消息,然后就收到刚刚的200条消息。(总的消息条数未超过1000)
.....
还有其他一些恢复订阅策略就不一 一介绍了。总之,恢复订阅策略针对的是非持久化的retroactive consumer订阅者而言的。它提高了非持久化消息的可靠性。
四,参考资料:
《ActiveMQ in Action》
ActiveMQ官网
JMS学习(六)--提高非持久订阅者的可靠性 以及 订阅恢复策略的更多相关文章
- JMS学习六(ActiveMQ消息传送模型)
ActiveMQ 支持两种截然不同的消息传送模型:PTP(即点对点模型)和Pub/Sub(即发布 /订阅模型),分别称作:PTP Domain 和Pub/Sub Domain. 一.PTP消息传送模型 ...
- JMS学习(六)-ActiveMQ的高可用性实现
原文地址:http://www.cnblogs.com/hapjin/p/5663024.html 一,ActiveMQ高可用性的架构 ActiveMQ的高可用性架构是基于Master/Slave 模 ...
- JMS学习(五)--ActiveMQ中的消息的持久化和非持久化 以及 持久订阅者 和 非持久订阅者之间的区别与联系
一,消息的持久化和非持久化 ①DeliveryMode 这是传输模式.ActiveMQ支持两种传输模式:持久传输和非持久传输(persistent and non-persistent deliver ...
- JMS学习七(ActiveMQ之Topic的持久订阅)
非持久化订阅持续到它们订阅对象的生命周期.这意味着,客户端只能在订阅者活动时看到相关主题发布的消息.如果订阅者不活动,它会错过相关主题的消息.如果花费较大的开销,订阅者可以被定义为durable(持久 ...
- ActiveMQ queue和topic,持久订阅和非持久订阅
消息的 destination 分为 queue 和 topic,而消费者称为 subscriber(订阅者).queue 中的消息只会发送给一个订阅者,而 topic 的消息,会发送给每一个订阅者. ...
- JMS学习一(JMS介绍)
一.JMS是个什么鬼 1.百度百科解释:JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之 ...
- 消息队列-推/拉模式学习 & ActiveMQ及JMS学习
一种分类是推和拉 . 还有一种分类是 Queue 和 Pub/Sub . 先看的这一篇:http://blog.csdn.net/heyutao007/article/details/50131089 ...
- ActiveMQ基本详解与总结& 消息队列-推/拉模式学习 & ActiveMQ及JMS学习
转自:https://www.cnblogs.com/Survivalist/p/8094069.html ActiveMQ基本详解与总结 基本使用可以参考https://www.cnblogs.co ...
- Jms学习篇一:JMS介绍
1.JMS介绍: JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API JMS是一种与厂商无关的 API,用来访问 ...
随机推荐
- <转>性能测试浅谈
本文主要针对WEB系统的性能测试.不涉及具体的执行操作,只是本人对性能测试的一点理解和认识. 性能测试的目的,简单说其实就是为了获取待测系统的响应时间.吞吐量.稳定性.容量等信息.而发现一些具体的性能 ...
- 微信小程序中跳转另一个小程序
wx.navigateToMiniProgram({ appId: 'xxxxxxxxxxxxxxxxxx', // 要跳转的小程序的appid path: 'page/index/index', / ...
- JQ_插件开发
在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了. ...
- linux下tomcat指定jdk和配置运行参数
一.指定运行jdk 1)set classpath.sh和catalina.sh中写入: export JAVA_HOME=/usr/local/java/jdk1.8.0_121 export JR ...
- 简单模拟flume
NetCat方式: 远程访问的方式进行消息传递 配置一个Agent,主要配置三个组件: source, channel, sink 上图中为什么channel会带s,变成channels? 可以绑定多 ...
- http-cache浏览器缓存
摘至知乎 首先得明确 http 缓存的好处 减少了冗余的数据传输,减少网费 减少服务器端的压力 Web 缓存能够减少延迟与网络阻塞,进而减少显示某个资源所用的时间 加快客户端加载网页的速度 常见 ht ...
- 树形DP ---- Codeforces Global Round 2 F. Niyaz and Small Degrees引发的一场血案
Aspirations:没有结果,没有成绩,acm是否有意义?它最大的意义就是让我培养快速理解和应用一个个未知知识点的能力. ————————————————————————————————————— ...
- 转载:ArcEngine 唯一值查询
转载 http://virgoooos.iteye.com/blog/512329 转载:http://blog.csdn.net/mydriverc/archive/2007/07/26/17092 ...
- PAT-1045. Favorite Color Stripe (30)-LIS
将Eva喜欢的颜色按顺序编个优先级, 2 3 1 5 6-> 1 2 3 4 5 然后读取stripe,将Eva不喜欢的先剔除掉,剩下的颜色替换为相应的优先级 2 2 4(去掉) 1 5 5 6 ...
- Daily Scrum NO.7
工作概况 今日由于时间比较充裕,没有编译作业的干扰,团员们的进度喜人.线程池.动态爬取.异常清理这三个主要开发工作已经步入尾声.其中线程池开发工作的代码已经签入,现主要在测试和优化.动态爬取今日也签入 ...