RabbitMq的事务机制

news/2024/11/14 22:58:02/

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/news/1508727.html

相关文章

opencv-python图像增强一:传统图像去噪方法整理

一、简介: 在数字图像处理领域,噪声一直是影响图像质量的重要因素。无论是拍摄过程中的环境干扰,还是传输过程中的信号失真,噪声都可能导致图像模糊、细节丢失,甚至影响后续的图像分析和应用。为了提高图像的视觉效果…

24/8/8算法笔记 决策树构建鸢尾花

决策树是一种由算法自动设计的模型。在机器学习中,构建决策树的过程通常遵循以下步骤: 特征选择:算法会评估每个特征,并选择一个特征作为节点分裂的依据。这个选择基于某种准则,如信息增益(ID3算法&#xf…

《王道》课后练习1:栈

03: 栈的初态和终态均为空,以I和O分别表示入栈和出栈,则出入栈的操作序列可表示为由I和O组成的序列,可以操作的序列称为合法序列,否则称为非法序列。 1)下面所示的序列中哪些是合法的? 分析:…

redis 入门,一起学习redis

文章目录 一、什么是redis? redis的作用?二、redis的特点三、redis的基本数据结构类型四、redis 的三种特殊数据类型五、redis 作为缓存六、redis 作为缓存存在的问题6.1 数据一致性6.2 缓存雪崩6.3 缓存穿透6.4 缓存击穿 七、redis为什么那么快?八、re…

C语言——预处理详解(下)

目录 前言 #和## 1.#运算符 2.##运算符 命名约定 #undef 命令行定义 条件编译 1.单分支条件编译 2.多分支条件编译 3.判断是否被定义 4.嵌套指令 头文件的包含 1.头文件被包含的方式 (1)本地文件包含 (2)库文件包含 2.嵌套文件包含 其他预处理指令 1.#error…

第三章 zookeeper+kafka群集

消息队列 概念 消息(Message)是指在应用间传送的数据消息队列(Message Queue)是一种应用间的通信方式解决方法,确保消息的可靠传递 特征 存储 将消息存储在某种类型的缓冲区中,直到目标进程读取这些消…

【HarmonyOS NEXT星河版开发学习】小型测试案例11-购物车数字框

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面(暂未发布) 前言 经过一周的学习,我发现还是进行拆分讲解效果会比较好,因为鸿蒙和前端十分的相识。主要就是表达的方式不同罢了…

设计模式-单例设计模式

单例模式的设计和线程安全 单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。实现单例模式时,线程安全性是一个重要考虑因素,特别是在多线程环境中。 1. C11 之前的线程安全实现 在 C11 之前&#…