ActiveMQ消息可靠性-持久性
三个方面保证消息的可靠性
1.消息的持久
2.事物
3.签收
一:PERSISTENT:持久性
参数说明:1.持久
2.非持久
Java里面设置持久化和非持久
持久:
将持久性设置为持久
宕机前,数据正常,未被消费
服务器恢复后,数据仍然存在,未被消费的消息为3
非持久
设置为非持久
宕机前
服务器恢复后,消息全部丢失
上面例子指定了持久化和非持久化,如果不指定的话默认为持久化
以上是针对队列模式(queue)
主题模式(Topic)
主题模式的持久化是针对订阅者,因为订阅模式下生产者将消息发送出去就啥也不管了,如果没有订阅者,消息就等于是废消息,一点意义也没有,所以应该在消费者端进行持久化
实验:
1.首先消费者先订阅:如图一个订阅者(在线)
代码:
package com.steak.activemq.test; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; import java.io.IOException; public class Consumer { private static final StringACTIVE_URL ="tcp://127.0.0.1:61616"; private static final StringQUEUE ="topic_persist"; public static void main(String[] args)throws JMSException, IOException { //创建连接工厂 ActiveMQConnectionFactory activeMQConnectionFactory =new ActiveMQConnectionFactory(ACTIVE_URL); //通过连接工厂,获得连接 Connection connection = activeMQConnectionFactory.createConnection(); connection.setClientID("刘牌");//订阅者 //创建session,第一个参数叫事物,第二个叫签收 Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); //创建目的地 Topic topic = session.createTopic(QUEUE); //持久订阅者 TopicSubscriber topicSubscriber = session.createDurableSubscriber(topic,"remark"); connection.start(); Message message = topicSubscriber.receive(); while (null != message){ TextMessage textMessage = (TextMessage) message; System.out.println("topic持久化的消息 "+textMessage.getText()); //如果1秒钟以后收不到消息,自动断开,相当于取关 message = topicSubscriber.receive(1000L); } session.close(); connection.close(); } }
2.然后启动生产者(发布者):此时发布了三条,订阅者收到了三条
代码:
package com.steak.activemq.test; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; public class Producer { private static final StringACTIVE_URL ="tcp://127.0.0.1:61616"; private static final StringQUEUE ="topic_persist"; public static void main(String[] args)throws JMSException { //创建连接工厂 ActiveMQConnectionFactory activeMQConnectionFactory =new ActiveMQConnectionFactory(ACTIVE_URL); //通过连接工厂,获得连接 Connection connection = activeMQConnectionFactory.createConnection(); //创建session Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); //创建目的地 Topic topic = session.createTopic(QUEUE); //创建消息的生产者 MessageProducer messageProducer = session.createProducer(topic); connection.start(); //通过使用messageProducer生产消息发送到MQ队列里 for (int i =0 ; i <3 ; i++){ //创建消息 TextMessage textMessage = session.createTextMessage("消息 "+i); //通过messageProducer发送消息 messageProducer.send(textMessage); } //关闭资源 messageProducer.close(); session.close(); connection.close(); System.out.println("消息发送完成"); } }
因为我们设置了1秒钟过后如果收不到消息就断开连接,所以消费者从在线变为离线
如果设置为receive(),则一直监听(相当于微信公众号一直都关注,一直都能收到消息)
无论消费者是否在线,都会接收到,不在线的话,下次连接的时候,会把没有收到的消息都接收过来(相当于我取关了,不能收到消息,但是我再此关注,我也能把我取关的这段时间的消息都收到),前提时注册过一次,第一注册以前的消息肯定是收不到
ActiveMQ消息可靠性-持久性的更多相关文章
- ActiveMQ消息可靠性-签收
非事务模式下消费者签收 动签收就像快递到达时,快递寄送点给你签收了,不用你自己去签收,而手动签收就是必须我本人签收, 自动签收(默认为自动签收) 手动签收:能够避免消息的重复消费 当设置为手动签收时, ...
- ActiveMQ消息可靠性-事物
事物偏生产者,签收偏消费者 设置为true,需要手动提交 设置为false,自动提交 使用手动提交的好处就是可以回滚,当整个事物提交时,里面的某条失败了,可以事物回滚,于是保证了数据的一致性 ...
- ActiveMQ消息的可靠性机制(转)
文章转自:http://www.linuxidc.com/Linux/2013-02/79664.htm 1.JMS消息确认机制 JMS消息只有在被确认之后,才认为已经被成功地消费了.消息的成功消费通 ...
- 消息中间件-activemq消息机制和持久化介绍(三)
前面一节简单学习了activemq的使用,我们知道activemq的使用方式非常简单有如下几个步骤: 创建连接工厂 创建连接 创建会话 创建目的地 创建生产者或消费者 生产或消费消息 关闭生产或消费者 ...
- 转载:ActiveMQ的可靠性机制
1.JMS消息确认机制 JMS消息只有在被确认之后,才认为已经被成功地消费了.消息的成功消费通常包含三个阶段:客户接收消息.客户处理消息和消息被确认.在事务性会话中,当一个事务被提交的时候,确认自动发 ...
- 深入浅出 JMS(三) - ActiveMQ 消息传输
深入浅出 JMS(三) - ActiveMQ 消息传输 一.消息协商器(Message Broker) broke:消息的交换器,就是对消息进行管理的容器.ActiveMQ 可以创建多个 Broker ...
- RabbitMQ 和 Kafka 的消息可靠性对比
RabbitMQ和Kafka都提供持久的消息保证.两者都提供至少一次和至多一次的保证,另外,Kafka在某些限定情况下可以提供精确的一次(exactly-once)保证. 让我们首先理解一下上述术语的 ...
- RabbitMQ高级之如何保证消息可靠性?
人生终将是场单人旅途,孤独之前是迷茫,孤独过后是成长. 楔子 本篇是消息队列RabbitMQ的第四弹. RabbitMQ我已经写了三篇了,基础的收发消息和基础的概念我都已经写了,学任何东西都是这样,先 ...
- 2015年12月10日 spring初级知识讲解(三)Spring消息之activeMQ消息队列
基础 JMS消息 一.下载ActiveMQ并安装 地址:http://activemq.apache.org/ 最新版本:5.13.0 下载完后解压缩到本地硬盘中,解压目录中activemq-core ...
随机推荐
- Mac:输出phpinfo的信息
输出phpinfo的信息1.echo '<?php phpinfo(); ?>' | php 2>&12.php -a 进入Interactive shell模式然后:pri ...
- Comet OJ - Contest #7 C 临时翻出来的题(容斥+状压)
题意 https://www.cometoj.com/contest/52/problem/C?problem_id=2416 思路 这里提供一种容斥的写法(?好像网上没看到这种写法) 题目要求编号为 ...
- 推荐一款年轻人交友软件get
推荐一款年轻人交友软件get 1 介绍 Get是一款认识新朋友的年轻人交友软件.接唱,发现有趣的声音,找到你的音缘.限时聊天,加入给你分配一个3分钟的对象,你们能不能碰撞出一点火花呢?推荐好友,扩列处 ...
- 第五次实验报告:使用Packet Tracer理解OSPF路由协议
目录 1 实验目的 2 实验内容 3. 实验报告 3.1 建立网络拓扑结构 4. 配置 4.1 配置并激活串行地址和以太网地址 4.1.1 R1 4.1.2 R2 4.1.3 R3 4.1.4 PC ...
- 深入学习 esp8266 wifimanager源码解析(打造专属自己的web配网)
QQ技术互动交流群:ESP8266&32 物联网开发 群号622368884,不喜勿喷 单片机菜鸟博哥CSDN 1.前言 废话少说,本篇博文的目的就是深入学习 WifiManager 这个gi ...
- ECMAScript 初探 - 对象篇
一.对象 如果你用过 C++ 或 Java,肯定熟悉类(class).在 ECMAScript 中并没有 "类" 这个词, 其对应的是 "对象定义",不过这太拗 ...
- fiddler抓包-4-简单对数据进行mock
前言 Fiddler中有一个 AutoRespinder 选项,我们可以用它作为mock数据,可以修改它的参数等等.所有信息的返回,与我们断点类似,但这里也可以mock状态码直接是404或者跳转至另一 ...
- Windows安装Nginx需要注意的地方
在使用 Nginx 之前,首先要三连问,它是什么?用来做什么?为什么用它? 这篇文章很好的解答了上面的问题,并补充了什么是正向代理和反向代理以及区别的知识 https://www.cnblogs. ...
- HMAC算法原理
HMAC算法是一种基于密钥的报文完整性的验证方法 ,其安全性是建立在Hash加密算法基础上的.它要求通信双方共享密钥.约定算法.对报文进行Hash运算,形成固定长度的认证码.通信双方通过认证码的校验来 ...
- 插件油泼猴+脚本 for chrome 安装 - https://greasyfork.org/zh-CN
http://chromecj.com/utilities/2018-09/1525.html 一.将 *.crx 改名为 *.zip 二.访问 chrome://flags/#extensions- ...