RabbitMq的事务机制

devtools/2024/10/18 12:26:13/

RabbitMQ中与事务机制有关的方法有三个:txSelect(), txCommit()以及txRollback(), txSelect用于将当前channel设置成transaction模式,txCommit用于提交事务,txRollback用于回滚事务,在通过txSelect开启事务之后,我们便可以发布消息给broker代理服务器了,如果txCommit提交成功了,则消息一定到达了broker了,如果在txCommit执行之前broker异常崩溃或者由于其他原因抛出异常,这个时候我们便可以捕获异常通过txRollback回滚事务了。

public class P1 {private static final String QUEUE_NAME = "test_tx";public static void main(String[] args) throws IOException, TimeoutException {Connection connection = ConnectionUtils.getConnection();Channel channel = connection.createChannel();channel.queueDeclare(QUEUE_NAME,false,false,true,null);SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z");Date date = new Date(System.currentTimeMillis());String message = simpleDateFormat.format(date);try {channel.txSelect();//开始事务channel.basicPublish("",QUEUE_NAME,null,message.getBytes());channel.txCommit();//提交事务}catch (Exception e){channel.txRollback();//回滚事务System.out.println("send message txRollback");}channel.close();connection.close();}
}
  • 采用事务机制实现会降低RabbitMQ的消息吞吐量。
  • 有一种更好的方法就是开启发布确认,生产者在发送消息时会为每条消息分配一个唯一的id,当消息正常到达broker时就会通知生产者。
  • 一旦发布一条消息,生产者应用程序就可以在等信道返回确认的同时继续发送下一条消息,当消息最终得到确认之后,生产者应用便可以通过回调方法来处理该确认消息,如果 RabbitMQ 因为自身内部错误导致消息丢失,就会发送一条 nack 消息,生产者应用程序同样可以在回调方法中处理该 nack 消息。

http://www.ppmy.cn/devtools/93951.html

相关文章

Java中的人机交互(HCI):构建交互式应用程序

人机交互(Human-Computer Interaction, HCI)是研究人类与计算机系统之间交互的学科。在Java编程中,HCI不仅涉及用户界面的设计,还包括用户体验的优化、交互技术的实现以及用户输入的处理。本文将深入探讨如何在Java中实现高效的人…

学习STM32(2)--STM32单片机GPIO应用

目录 1 引 言 2 实验目的 3 实验内容 3.1掌握STM32F103的GPIO控制 3.1.1 GPIO的分组 3.1.2 GPIO的常用功能 3.1.3 STM32单片机GPIO位结构 3.1.4 STM32单片机GPIO工作模式 3.1.5 STM32的GPIO 输出-点亮LED编程要点 使用GPIO时,按下面步骤进行&#xff1…

【SpringBoot 属性加载机制】

SpringBoot 属性加载 一个 SpringBoot 应用的配置属性可以有多种不同的来源, 比如可以来自操作系统的环境变量, 比如可以来自 application.yaml 文件; 每一种不同的属性来源, 都会被 SpringBoot 封装成一个PropertySource对象, 保存在 Environment 对象的 PropertySources 类型…

死信队列.

“死信”是指在RabbitMQ中那些因为某些原因无法被正常处理的消息。

从零开始实现循环神经网络

本节我们通过使用MXnet,来从零开始的实现一个含有隐藏状态的循环神经网络。 前序工作 数据集预处理进行采样 实现循环神经网络 完成前序工作后,即可开始实现循环神经网络。本文首先构建一个具有隐状态的循环神经网络。其结构如图所示: 接…

C语言指针详解-包过系列(二)目录版

C语言指针详解-包过系列(二)目录版 1、数组名的深入理解1.1、数组名的本质1.2、数组名本质的两个例外1.2.1、sizeof(数组名)1.2.2、&数组名 2、使用指针访问数组3、一维数组传参本质4、二级指针4.1、二级指针介绍4.2、二级指针…

亿达科创亮相智造数字科技大会

8月8日,IMC2024第七届智造数字科技大会在京启幕。大会以“乘‘数’而上”为题,邀请300智能制造行业数字化转型技术大咖、领军者及实践者共聚一堂,解读智造行业转型进程。亿达科创受邀参会,分享企业前沿数字技术、解决方案与创新实…

零知识证明中PLONKish和AIR的区别

这里写自定义目录标题 介绍AIRPLONKish 介绍 首先我们讲一下什么是算数化,为什么零知识证明当中经常提到算术化。算术化是指将一个计算问题(通常是我想要证明的问题,非代数过程)转化为一组代数方程。使得这些问题可以用多项式计算…