【ActiveMQ添加事务】

添加事务主要注意两点:

1.修改Session配置,启用事务

/**
* 3.通过Connection对象创建Session会话(上下文环境对象),用于接收消息。
* 参数1:是否启用事务
* 参数2:签收模式,一般设置为自动签收
*/
Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);

2.代码最后提交事务(必须要提交事务,不然在MQ上无法得到发送的消息)

//提交事务
session.commit();

[ session设置启用事务,但不加session.commit(),执行代码之后,这里不会改变 ]

[ 加了session.commit(),执行代码之后,MQ上就会有对应的消息 ]

【三种签收方式】

[ Session.AUTO_ACKNOWLEDGE ]

当客户端从receiver或onMessage成功返回时,Session自动签收客户端的这条消息的收条。

[ Session.CLIENT_ACKNOWLEDGE ]

客户端通过调用消息(Message)的acknowledge方法签收消息。在这种情况下,签收发生在Session层面:签收一个已经消费的消息会自动地签收这个Session所有已消费的收条。

[ Session.DUPS_OK_ACKNOWLEDGE ]

Session不必确保对传送消息的签收,这个模式可能会引起消息的重复,但是降低了Session的开销,所以只有客户端能容忍重复的消息,才可使用。

【  Session.CLIENT_ACKNOWLEDGE 签收方式】

[ 修改Send.java ]

/**
* 3.通过Connection对象创建Session会话(上下文环境对象),用于接收消息。
* 参数1:是否启用事务 启用事务
* 参数2:签收模式,修改为 客户端确认签收
*/
Session session = connection.createSession(Boolean.TRUE, Session.CLIENT_ACKNOWLEDGE);

[ 修改 Receiver.java ]

消费者的session与生产者的session签收模式保持一致,注意,生产者启用事务了,但是消费者这里事务不要启用,不然会一直消费

/**
* 3.通过Connection对象创建Session会话(上下文环境对象),用于接收消息。
* 参数1:是否启用事务 消费者不启用事务
* 参数2:签收模式,修改为 客户端确认签收
*/
Session session = connection.createSession(Boolean.FALSE, Session.CLIENT_ACKNOWLEDGE);
消费者获取消息时添加一行:msg.acknowledge();
/**
* 7.最后,使用JMS规范的TextMessage形式创建数据(通过Session对象),
* 发送端使用MessageProducer的Send方法发送数据。
* 接受端使用receive方法接收数据。
*/
while(true){
TextMessage msg = (TextMessage)messageConsumer.receive();
//消费者手工去签收消息,另起一个线程(TCP)去通知MQ服务确认消息签收
msg.acknowledge();
if(msg==null)
break;
System.out.println("【消费者接收】"+msg.getText());
}

04_ActiveMQ事务与三种签收方式的更多相关文章

  1. Spring 实现事务的三种方式

    事务:保证数据的运行不会说A给B钱,A钱给了B却没收到. 实现事务的三种方式(重要代码): 1.aspectJ AOP实现事务: <bean id="dataSourceTransac ...

  2. Linq to Sql : 三种事务处理方式

    原文:Linq to Sql : 三种事务处理方式 Linq to SQL支持三种事务处理模型:显式本地事务.显式可分发事务.隐式事务.(from  MSDN: 事务 (LINQ to SQL)).M ...

  3. python对mysql数据库操作的三种不同方式

    首先要说一下,在这个暑期如果没有什么特殊情况,我打算用python尝试写一个考试系统,希望能在下学期的python课程实际使用,并且尽量在此之前把用到的相关技术都以分篇博客的方式分享出来,有想要交流的 ...

  4. Hibernate的Api以及三种查询方式

    Hibernate  Api |-- Configuration       配置管理类对象 config.configure();    加载主配置文件的方法(hibernate.cfg.xml) ...

  5. 【jdbc】【c3p0】c3p0三种配置方式【整理】

    c3p0三种配置方式 c3p0的配置方式分为三种,分别是1.setters一个个地设置各个配置项2.类路径下提供一个c3p0.properties文件3.类路径下提供一个c3p0-config.xml ...

  6. 2019年6月14日 Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)

    摘要 MTV与MVC 多对多表三种创建方式 ajax ,前后端传输数据编码格式contentType 批量插入数据和自定义分页器 一.MVC与MTV MVC(Model View Controller ...

  7. spring Bean的三种配置方式

    Spring Bean有三种配置方式: 传统的XML配置方式 基于注解的配置 基于类的Java Config 添加spring的maven repository <dependency> ...

  8. 分布式锁的三种实现方式 数据库、redis、zookeeper

    版权声明: https://blog.csdn.net/wuzhiwei549/article/details/80692278 一.为什么要使用分布式锁 我们在开发应用的时候,如果需要对某一个共享变 ...

  9. 三种存储方式DAS、NAS、SAN

    ------------恢复内容开始------------ 一.DAS.NAS.SAN在存储领域的位置 随着主机.磁盘.网络等技术的发展,数据存储的方式和架构也在一直不停改变,本文主要介绍目前主流的 ...

随机推荐

  1. windows下webpack不是内部命令 解决方法

    安装webpack 到打包文件一路出现的各种问题 windows下webpack不是内部命令 安装完webpack后要加下环境变量 系统变量新建 NODE_PATH 变量值E:\demo\webpac ...

  2. 适配器模式-如何把usb插到插座上

    前言 下面所写的内容不是实际的业务场景, 也可能不符合正常的生活习惯, 或者不满足一些人的口味 所写的内容包括之前的帖子,只是为了方便大家更好的记住这个设计模式,实际生活中要灵活应用 设计模式重思想, ...

  3. python使用easyinstall安装xlrd、xlwt、pandas等功能模块的方法

    在日常工作中,使用Python时经常要引入一些集成好的第三方功能模块,如读写excel的xlrd和xlwt模块,以及数据分析常用的pandas模块等. 原生的python并不含这些模块,在使用这些功能 ...

  4. FreeRTOS-03中断测试

    根据正点原子FreeRTOS视频整理 单片机:STM32F207VC FreeRTOS源码版本:v10.0.1 portDISABLE_INTERRUPTS(); /*关中断*/portENABLE_ ...

  5. 初学 spring

    1.spring 开发环境,包含eclipse https://spring.io/tools3/sts/all/

  6. 正则基础之——NFA引擎匹配原理

    记录一下一篇很好的博文:https://blog.csdn.net/lxcnn/article/details/4304651

  7. Go语言小试牛刀---几个简单的例子

    整理资料,发现之前手写的Go语言资料,现在贴过来. 第一个:Channel的使用,创建一个随机数 package main import "fmt" import "ru ...

  8. Linux下日志文件监控系统Logwatch的使用记录

    Linux下日志文件监控系统Logwatch的使用记录 原文:http://www.cnblogs.com/kevingrace/p/6519504.html 在维护Linux服务器时,经常需要查看系 ...

  9. MySQL多表更新

    多表更新:参照另外的表来更新本表的内容 table_reference {[inner | cross] join | {left | right} [outer] join}  内连接.左外连接.右 ...

  10. 关于 vertical-align 的一些小知识

    引子 在日常开发过程中,我们经常会遇到如下的场景,一行中既有图片也有文字,而且图片还要和文字对齐.效果如下: 通常代码如下: <!DOCTYPE html> <html> &l ...