rocketmq事务消息源码解析
什么是事务消息事务消息是apache rocketMq提供的一种高级消息类型支持在分布式场景下保障消息生产和本地事务的最终一致性代码示例事务消息处理流程生产者将消息发送至rockerMq服务端rockerMq服务端口将消息持久化后向生产者返回ACK确认消息发送已经成功。此时消息被标记为“暂不能投递”这种状态下的消息即为半事务消息生产者开始执行本地事务逻辑生产者根据本地事务执行结果向服务端提交二次确认结果服务端接收到确认结果后处理逻辑如下二次确认结果为commit服务端将半事务消息标记为可投递并投递给消费二次确认结果为Rollback服务端将回滚事务不会将半事务消息投递给消费者若服务端未收到发送者提交的二次确认结果或服务端收到的二次确认结果为Unknow未知状态经过固定时间后服务端将对消息生产者即生产者集群中任一生产者实例发起消息回查生产者收到消息回查后需要检查对应消息的本地事务执行的最终结果生产者根据检查到本地事务的最终状态再次提交二次确认。服务端仍按步骤4对半事务消息进行处理底层逻辑处理流程基础流程事务回查数据流转图关键源码1、事务消息发送2、half消息存储broker存储half消息3、执行本地事务提交事务状态4、处理事务状态5、事务回查事务回查时间间隔事务状态提交超时时间底层逻辑触发回查的条件条件含义opMsg null valueOfCurrentMinusBorn checkImmunityTime没有对应的 Op 消息且已超过免疫期immunity time确保消息有足够时间等待生产者提交状态不至于太早回查。超时就需要回查opMsg ! null opMsg.getLastBornTimestamp() - startTime transactionTimeoutop 消息存在但时间戳太早可能未覆盖当前消息。防止op记录延迟因未记录导致事务消息不处理valueOfCurrentMinusBorn -1消息时间异常未来时间举例源码定时任务进行事务回查生产者处理回查请求存储设计half和op两个队列组成部分作用设计原因half队列RMQ_SYS_TRANS_HALF_TOPIC存储事务的“准备”消息半消息未提交前不可见保证消息先持久化防止事务状态丢失op 队列RMQ_SYS_TRANS_OP_HALF_TOPIC存储事务的“操作”消息commit/rollback记录事务状态变化实现幂等性与恢复机制OP消息Op 消息体是一个字符串内容格式如下offset1[offsetSeparator]offset2[offsetSeparator]deleteContext缓存每个 queueId 对应一个 MessageQueueOpContext内部维护一个队列和总数据大小批量写入op队列批量写入时间间隔写入逻辑遍历deleteContext构建OP消息写入commitLog根据queueId取出deleteContext中的队列contextQueue,进行追加为消息体构建OP消息事务消息的状态恢复机制当 Broker 故障重启后通过 Op 消息可以重建事务状态Op 消息记录了哪些 half 消息已经被提交或回滚在 Broker 启动时会加载这些 Op 消息重建 removeMap清理已处理的 half 消息对于未处理的消息后续会触发回查check机制。事务消息的幂等性唯一业务 IDUNIQ_KEY通常为 msgId 或业务自定义 IDOp 消息中的 queueOffset 列表确保每个事务只处理一次生产者本地事务幂等性逻辑避免重复执行本地事务。

相关新闻

rocketmq顺序消息源码解析

rocketmq顺序消息源码解析

支持消费者按照发送消息的先后顺序获取消息,从而实现有业务场景中的顺序处理。顺序消息的顺序关系通过消息组(messageGroup)判定和识别,发送顺序消息需要为每条消息设置归属的消息组,相同消息组的多条消息之间遵循先进…

2026/8/26 16:13:47 阅读更多 →
递归算法精讲:从经典集合判断题掌握逆向搜索与剪枝优化

递归算法精讲:从经典集合判断题掌握逆向搜索与剪枝优化

1. 项目概述:从一道经典递归题看算法思维的本质看到“信息学奥赛一本通 1211”和“OpenJudge NOI 1.13 41”这两个题号,很多正在备战信息学奥赛(NOI)或CSP认证的同学应该会心一笑。这道名为“判断元素是否存在”的题目&#xff0c…

2026/8/26 14:12:57 阅读更多 →
说说vue3 中的响应式设计原理

说说vue3 中的响应式设计原理

Vue 3 的响应式系统是基于 ES6 Proxy 的“依赖追踪 响应式副作用”机制,相比 Vue 2 的 Object.defineProperty,它在能力、性能和开发体验上都是一次彻底重构。下面从 设计思想 → 核心实现 → 关键 API → 与 Vue 2 的本质差异​ 系统讲解。一、一句话总…

2026/8/26 15:34:19 阅读更多 →

最新新闻

自建玉米识别数据集并用YOLOv8训练全流程指南

自建玉米识别数据集并用YOLOv8训练全流程指南

简介:目标检测模型的落地效果高度依赖训练数据的质量,而公开数据集往往与真实农业场景存在偏差,导致模型在实际田间环境中表现不佳。本文从数据集构建的基础概念出发,介绍如何针对特定应用场景采集和清洗图片,并利用la…

2026/8/26 22:35:29 阅读更多 →
基于YOLO的手语识别系统实战:从数据集构建到实时部署

基于YOLO的手语识别系统实战:从数据集构建到实时部署

简介:计算机视觉技术正深入改变人机交互方式,其中目标检测作为核心方向,已在安防、零售、医疗等领域广泛落地。YOLO作为高效的目标检测算法,凭借端到端的检测能力和出色的实时性,成为开发者构建视觉应用的首选框架。手…

2026/8/26 22:35:29 阅读更多 →
InpaintOnly+LaMa:ControlNet中的结构级图像修复方案

InpaintOnly+LaMa:ControlNet中的结构级图像修复方案

1. 这不是“换个背景”那么简单:InpaintOnly LaMa 在 ControlNet 里的真实定位ControlNet 插件在 Stable Diffusion WebUI 生态里,已经从“锦上添花”变成了“刚需基建”。但很多人装完 ControlNet,只用 Canny、OpenPose 或 Depth&#xff0…

2026/8/26 22:35:29 阅读更多 →
蚂蚁感冒题解:用穿透模型理解轨迹相交与病毒传播

蚂蚁感冒题解:用穿透模型理解轨迹相交与病毒传播

1. 这道题不是考编程,是考你有没有“看见”数学结构 “蚂蚁感冒”这道题在蓝桥杯国赛真题里反复出现,标题里带个括号写着“数学”,很多人第一反应是:哦,又一道需要写代码模拟的题。但实测下来, 真正卡住90…

2026/8/26 22:35:29 阅读更多 →
构建可信安全超自动化系统:从零信任到可观测性的工程实践

构建可信安全超自动化系统:从零信任到可观测性的工程实践

1. 项目概述:当“安全超自动化”遇上“可信”的硬核挑战最近在跟几个做安全自动化和RPA(机器人流程自动化)的朋友聊天,大家不约而同地提到了一个词:“可信”。这让我想起一个很有意思的比喻,有人把理想中的…

2026/8/26 22:35:29 阅读更多 →
QT面试深度指南:从C++基础到框架原理与工程实践

QT面试深度指南:从C++基础到框架原理与工程实践

1. 从一次真实的QT面试复盘说起去年我帮团队招一个中级QT开发,面了大概十几个人,发现一个挺有意思的现象:很多候选人C基础题答得还行,一到QT的具体场景和原理深挖,就开始卡壳。比如我问“QObject的父子内存管理&#x…

2026/8/26 22:34:28 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →