news 2026/8/28 23:25:37

RocketMQ的事务消息是如何实现的?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RocketMQ的事务消息是如何实现的?

RocketMQ 通过 TransactionListener 接口实现事务消息机制,其工作流程如下:

  1. 发送半消息
    首先向 Broker 发送一条半消息(状态标记为"prepared"),该消息会被存储在事务日志中但暂不可消费。

  2. 执行本地事务
    半消息发送成功后,应用程序执行本地事务逻辑并确定最终状态。

  3. 提交/回滚

    • 本地事务成功:通知 Broker 提交消息(状态改为"committed"),消息转为可消费状态
    • 本地事务失败:通知 Broker 回滚消息(状态改为"rollback"),消息会被立即删除

异常处理机制

未收到确认指令时
若 Broker 未及时收到 COMMIT/ROLLBACK:

  1. 主动发起事务状态检查
  2. 应用程序通过回调返回处理结果
  3. 若超时未响应则标记为"UNKNOW"状态
  4. 最终过期后自动回滚

半消息发送失败
由于业务操作在半消息之后执行:

  • 失败时业务尚未执行,不存在一致性问题
  • 可通过重试机制解决(自主重试或依赖上游重试)

设计优势

相比"先提交事务再发消息"的传统方案,事务消息解决了:

  1. 最终一致性
    即使 COMMIT 消息发送失败,MQ 仍能通过半消息状态反查确保最终一致
  2. 防丢失
    本地事务提交与消息投递形成原子操作,避免"事务成功但消息丢失"的情况
  3. 状态可追踪
    通过 prepared/committed/rollback 状态机明确消息生命周期
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/28 15:14:52

Kotaemon客户流失预警:行为模式识别

Kotaemon客户流失预警:行为模式识别 在金融、电信和电商这些高度依赖用户黏性的行业里,一个看似普通的对话——“最近费用怎么突然变高了?”——可能就是客户即将流失的第一道裂缝。传统风控系统往往要等到账单周期结束、服务取消申请提交后才…

作者头像 李华
网站建设 2026/8/28 20:18:02

碳钢高性能蝶阀为何能扛住600℃高温?

碳钢高性能蝶阀是以碳钢(如WCB、Q235等)为主要阀体材料,通过蝶板绕阀轴旋转(0-90度范围)实现启闭和调节的高性能阀门,具有高强度、高性价比的特点,广泛应用于石油化工、电力、冶金、市政等行业的…

作者头像 李华
网站建设 2026/8/28 13:12:07

Linux内核与发行版

Linux内核与发行版 当我们说Linux系统时,其含义往往是指采用Linux内核的操作系统。Linux内核负责控制硬件、 管理文件系统、进程管理、网络通讯等,但它本身并没有给用户提供必要的工具和应用软件。 由于Linux内核本身是开源的,所以一些人和厂商在其规则之下, 基于Linux内…

作者头像 李华
网站建设 2026/8/28 16:36:20

用户、文件及目录

用户、文件及目录 用户及用户组 Linux操作系统同样也是多用户操作系统,其中具有管理其他用户和计算机的全部资源的用户, 称为root。 安卓系统,实质上也是基于Linux,安卓手机上常常提到的root权限, 也就是获取最高的权限,就跟电脑获取超级管理员的权限是一样的。 在Li…

作者头像 李华
网站建设 2026/8/28 17:42:09

【JS】??和?:以及if()三者区别

1. ?? 空值合并运算符 (Nullish Coalescing Operator) 作用:当左侧的操作数为null或undefined时,返回右侧的操作数,否则返回左侧的操作数。 示例: const a null ?? default; // a default const b undefined ?? defa…

作者头像 李华
网站建设 2026/8/28 1:18:30

Codeium如何在vscode中使用

Codeium 在 VS Code 中完全使用指南 📥 安装 Codeium 方法一:VS Code 扩展商店直接安装(推荐) # 步骤: 1. 打开 VS Code 2. 点击左侧扩展图标(或按 CtrlShiftX) 3. 搜索 "Codeium" 4.…

作者头像 李华