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

RocketMQ实现分布式事务

RocketMQ的分布式事务消息功能,在普通消息基础上,支持二阶段的提交。将二阶段提交和本地事务绑定,实现全局提交结果的一致性。

1、生产者将消息发送至RocketMQ服务端。

2、RocketMQ服务端将消息持久化成功之后,向生产者返回Ack确认消息已经发送成功,此时消息被标记为"暂不能投递",这种状态下的消息即为半事务消息。

3、生产者开始执行本地事务逻辑。

4、生产者根据本地事务执行结果向服务端提交二次确认结果(Commit或是Rollback),服务端收到确认结果后处理逻辑如下:

二次确认结果为Commit:服务端将半事务消息标记为可投递,并投递给消费者。

二次确认结果为Rollback:服务端将回滚事务,不会将半事务消息投递给消费者。

5、在断网或者是生产者应用重启的特殊情况下,若服务端未收到生产者提交的二次确认结果,或服务端收到的二次确认结果为Unknown未知状态,经过固定时间后,服务端将对消息生产者集群中任一生产者实例发起消息回查。

6、生产者收到消息回查后,需要检查对应消息的本地事务执行的最终结果。

7、生产者根据检查到的本地事务的最终状态再次提交二次确认,服务端仍按照步骤4对半事务消息进行处理。

注意问题
消息类型
事务消息仅支持在MessageType为Transaction的主题使用,即事务消息只能发送至类型为事务消息的主题中。

消息消费
RocketMQ事务消息保证生产者本地事务和下游消息发送事务的一致性,但不保证消息消费结果和上游事务的一致性。因此需要下游业务自行保证消息正确处理,建议消费端做好消费重试。

中间状态
RocketMQ事务消息一致性为最终一致性,即在消息提交到下游消费端处理完成之前,下游和上游事务之间的状态会不一致。因此,事务消息仅适合能接受异步执行的场景。

事务超时
RocketMQ事务消息的生命周期存在超时机制,即半事务消息被生产者发送服务端后,如果在指定时间内服务端无法确认提交或者回滚状态,则消息默认会被回滚。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • vst 算法R语言手工实现 | Seurat 筛选高变基因的算法
  • 优化Python爬虫:多线程助力数据采集高速通道
  • vue仿甘特图开发工程施工进度表
  • openeuler 终端中文显示乱码、linux vim中文乱码
  • Billu_b0x靶机
  • Hadoop中的YARN组件
  • 计算机网络——网络层(IP地址与MAC地址、地址解析协议ARP、IP数据报格式以及转发分组、ICMP、IPV6)
  • 鸿蒙语言基础类库:【@system.brightness (屏幕亮度)】
  • 【Python】Python-docx使用实例 科技档案封面批量生成
  • CollectionUtils的使用
  • Python实现发票信息识别
  • 编译打包自己的云手机(redroid)镜像
  • Puppeteer 是什么以及如何在网络抓取中使用它 | 2024 完整指南
  • 掌握Laravel的策略与授权门面:构建安全的Web应用
  • React Native: 构建原生级移动应用的跨平台框架
  • 收藏网友的 源程序下载网
  • 2018一半小结一波
  • 4个实用的微服务测试策略
  • Apache的80端口被占用以及访问时报错403
  • Bytom交易说明(账户管理模式)
  • JS函数式编程 数组部分风格 ES6版
  • Linux gpio口使用方法
  • Python实现BT种子转化为磁力链接【实战】
  • QQ浏览器x5内核的兼容性问题
  • React16时代,该用什么姿势写 React ?
  • SegmentFault 2015 Top Rank
  • Wamp集成环境 添加PHP的新版本
  • 工作中总结前端开发流程--vue项目
  • 机器学习中为什么要做归一化normalization
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 如何借助 NoSQL 提高 JPA 应用性能
  • Android开发者必备:推荐一款助力开发的开源APP
  • Mac 上flink的安装与启动
  • raise 与 raise ... from 的区别
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ###项目技术发展史
  • #Linux(权限管理)
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (强烈推荐)移动端音视频从零到上手(下)
  • (三)mysql_MYSQL(三)
  • (顺序)容器的好伴侣 --- 容器适配器
  • (循环依赖问题)学习spring的第九天
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • .bashrc在哪里,alias妙用
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET 给NuGet包添加Readme
  • .net 后台导出excel ,word
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .Net开发笔记(二十)创建一个需要授权的第三方组件