04_ActiveMQ事务与三种签收方式
【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事务与三种签收方式的更多相关文章
- Spring 实现事务的三种方式
事务:保证数据的运行不会说A给B钱,A钱给了B却没收到. 实现事务的三种方式(重要代码): 1.aspectJ AOP实现事务: <bean id="dataSourceTransac ...
- Linq to Sql : 三种事务处理方式
原文:Linq to Sql : 三种事务处理方式 Linq to SQL支持三种事务处理模型:显式本地事务.显式可分发事务.隐式事务.(from MSDN: 事务 (LINQ to SQL)).M ...
- python对mysql数据库操作的三种不同方式
首先要说一下,在这个暑期如果没有什么特殊情况,我打算用python尝试写一个考试系统,希望能在下学期的python课程实际使用,并且尽量在此之前把用到的相关技术都以分篇博客的方式分享出来,有想要交流的 ...
- Hibernate的Api以及三种查询方式
Hibernate Api |-- Configuration 配置管理类对象 config.configure(); 加载主配置文件的方法(hibernate.cfg.xml) ...
- 【jdbc】【c3p0】c3p0三种配置方式【整理】
c3p0三种配置方式 c3p0的配置方式分为三种,分别是1.setters一个个地设置各个配置项2.类路径下提供一个c3p0.properties文件3.类路径下提供一个c3p0-config.xml ...
- 2019年6月14日 Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)
摘要 MTV与MVC 多对多表三种创建方式 ajax ,前后端传输数据编码格式contentType 批量插入数据和自定义分页器 一.MVC与MTV MVC(Model View Controller ...
- spring Bean的三种配置方式
Spring Bean有三种配置方式: 传统的XML配置方式 基于注解的配置 基于类的Java Config 添加spring的maven repository <dependency> ...
- 分布式锁的三种实现方式 数据库、redis、zookeeper
版权声明: https://blog.csdn.net/wuzhiwei549/article/details/80692278 一.为什么要使用分布式锁 我们在开发应用的时候,如果需要对某一个共享变 ...
- 三种存储方式DAS、NAS、SAN
------------恢复内容开始------------ 一.DAS.NAS.SAN在存储领域的位置 随着主机.磁盘.网络等技术的发展,数据存储的方式和架构也在一直不停改变,本文主要介绍目前主流的 ...
随机推荐
- 使用IntelliJ IDEA 前最好修改的配置
目录 1.下载 2.破解 3.修改配置 下载 详见我的另外一篇博客:<软件开发资源下载>中的[IDE]->[IntelliJ IDEA] 破解 详见我的另外一篇博客:<最新版I ...
- 进阶篇:2.1)DFMA实施障碍和关键
本章目的:了解DFMA实施障碍与关键. 1.实施的障碍 面向制造和装配的产品开发能够降低产品成本.提高产品质量.缩短产品开发周期,但是,由于传统产品开发思想和各种条件的限制,实施面向制造和装配的产品开 ...
- yum的repo文件详解、以及epel简介、yum源的更换
一.什么是repo文件 repo文件是Fedora中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包 ...
- 解决bootstrap中显示不了本地字体图标
正在用bootstrap写一个登录界面时,准备用一个图标 但实际效果是: 可以看到图标并没有显示出来,百度一下,发现有可能是路径问题. 自己的目录关系和引用方式如下分别为: Ctrl+左键进入glyp ...
- Kong在windows10的hyperV CentOS上安装
1.启用hyperV manager 2.下载CentOS 3.给CentOS共享网络,添加Legacy NetWork Adapter 4.启动CentOS后安装kong(官网可查) 5.安装Pos ...
- leetcode简单题目两道(1)
Problem: You are playing the following Nim Game with your friend: There is a heap of stones on the t ...
- <数据挖掘导论>读书笔记4--其他分类技术
1.基于规则的分类器 2.最近邻分类器 3.贝叶斯分类器 4.人工神经网络 5.支持向量机 6.组合方法 7.不平衡类问题 8.多类问题
- js中的特殊符号含义
一. !! js中的!! var o ={flag:4}; var test = !!o.flag; console.log(test); // true 二.~~,<< (~~(Mat ...
- Codeforces 809D. Hitchhiking in the Baltic States
Description 给出 \(n\) 个数 \(a_i\),每一个数有一个取值 \([l_i,r_i]\) ,你来确定每一个数,使得 \(LIS\) 最大 题面 Solution 按照平时做法,设 ...
- SQLite.dll在xp中部署时的报错处理
错误信息: System.IO.FileNotFoundException: Could not load file or assembly 'System.Data.SQLite.dll' or o ...