当前位置: 首页 > news >正文

RabbitMQ的事务机制

想要保证发送者一定能把消息发送给RabbitMQ,一种是通过Confirm机制,另一种就是通过事务机制。

RabbitMQ的事务机制,允许生产者将一组操作打包成一个原子事务单元,要么全部执行成功,要么全部失败。事务提供了一种确保消息完整性的方法,但需要谨慎使用,因为他们对性能有一定的影响。

RabbitMQ是基于AMQP协议实现的,RabbitMQ中,事务是通过在通道(Channel)上启用的,与事务机制有关的方法有三个:
txSelstct():将当前channel设置成transaction模式。
txCommit():提交事务。
txRollback():回滚事务。

我们需要先通过txSelect开启事务,然后就可以发布消息给MQ了,如果txCommit提交成功了,则消息一定到达了RabbitMQ,如果在txCommit执行之前RabbitMQ实例异常崩溃或者抛出异常,那我们就可以捕获这个异常然后执行txRollback进行回滚事务。

所以,通过事务机制,我们也能保证消息一定可以发送给RabbitMQ。

以下,是一个通过事务发送消息的方法实例:

package com.example.demo.rabbitmq;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;public class RabbitMQTransactionExample {public static void main(String[] args) throws Exception {ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");try (Connection connection = factory.newConnection();Channel channel = connection.createChannel()) {//启用事务channel.txSelect();String exchangeName = "my_exchange";String routingKey = "my_routing_key";try {//发送第一条消息String message1 = "Transaction Message 1";channel.basicPublish(exchangeName, routingKey, null, message1.getBytes());//发送第二条消息String message2 = "Transaction Message 2";channel.basicPublish(exchangeName, routingKey, null, message2.getBytes());//模拟一个错误int x = 1 / 0;//提交事务(如果没有发生错误)channel.txCommit();System.out.println("Transaction committed.");} catch (Exception e) {//发生错误,回滚事务channel.txRollback();System.out.println("Transaction rolled back.");}}}
}
http://www.lryc.cn/news/324400.html

相关文章:

  • 41 物体检测和目标检测数据集【李沐动手学深度学习v2课程笔记】
  • 软件包管理(rpm+yum)
  • 网关层针对各微服务动态修改Ribbon路由策略
  • 如何从零开始拆解uni-app开发的vue项目(二)
  • 【生成对抗网络GAN】一篇文章讲透~
  • 【设计模式】Java 设计模式之模板命令模式(Command)
  • 如何在Flutter中实现一键登录
  • Amazon SageMaker + Stable Diffusion 搭建文本生成图像模型
  • FPGA数字信号处理前沿
  • 【Android】系统启动流程分析 —— init 进程启动过程
  • 抖音视频批量下载软件可导出视频分享链接|手机网页视频提取|视频爬虫采集工具
  • 鸿蒙Harmony应用开发—ArkTS-@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化
  • 深度解析:Elasticsearch写入请求处理流程
  • 数据结构:堆和二叉树遍历
  • [Halcon学习笔记]在Qt上实现Halcon窗口的字体设置颜色设置等功能
  • ArcGis 地图文档
  • 【C语言】动态内存分配
  • 算法思想总结:位运算
  • 四、HarmonyOS应用开发-ArkTS开发语言介绍
  • 3 Spring之DI详解
  • Web框架开发-Ajax
  • Python爬虫之urllib库
  • Docker学习笔记 - 常用命令
  • 数学建模(Topsis python代码 案例)
  • gateway网关指定路由响应超时时间
  • docker 和K8S知识分享
  • MySQL--select count(*)、count(1)、count(列名) 的区别你知道吗?
  • 使用verilog设计实现16位CPU及仿真
  • Python将字符串转换为datetime
  • Vue 3 + TypeScript + Vite的现代前端项目框架