跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

ActiveMQ 支持的两种事务机制解析

ActiveMQ 支持 JMS 和 XA 两种事务模式。JMS 基于 Session 提交回滚,XA 涉及分布式协调。事务状态下消息由 Broker 维护,Producer 发送即到达 Broker。持久化消息进入死信队列前会剥离事务 ID,避免影响事务存储,相关逻辑在 BrokerSupport.doResend 中实现。

涅槃凤凰发布于 2015/4/14更新于 2026/10/2596 浏览
ActiveMQ 支持的两种事务机制解析

ActiveMQ 主要支持两种事务处理模式:JMS 事务和 XA 事务。

JMS 事务基于 Session 对象的 commit() 和 rollback() 方法,行为类似于 JDBC 连接中的事务控制。而 XA 事务则涉及更复杂的分布式协调,客户端作为参与者与消息代理(Broker)进行通信,这就像 JDBC 连接在 XA 事务中与数据库交互一样。

在启用事务的 Session 中,生产者发送消息时会附带事务 ID。Broker 接收到消息后,会检查是否存在该 ID。若存在,消息会被暂存到事务存储区,等待最终的提交或回滚指令。这意味着 ActiveMQ 的事务状态实际上是由 Broker 维护的,而非仅仅依赖 Producer 端的状态。无论 Session 最终是否提交,消息都已经抵达了 Broker。

关于持久化消息的处理有个细节需要注意。当生产者配置为持久化模式时,若消息过期进入死信队列(DLQ),ActiveMQ 会在移动前剥离消息中的事务 ID。这样,过期的消息就不再受原事务约束,也不会再被保留在事务存储区中,而是直接转入死信队列。这一逻辑实现位于 org.apache.activemq.util.BrokerSupport 类的 doResend 方法中,代码里会将事务 ID 备份到 originalTransactionID 字段后再移除原始 ID。

更多推荐文章

查看全部
  • 科学机器学习中的物理信息神经网络:现状与展望
  • 基于 Trae 与 Vizro 的低代码数据可视化仪表板构建方案
  • Python 家庭用电数据分析与 Prophet 预测
  • Midjourney 制作抖音壁纸及副业变现指南
  • 使用 Ollama、Open WebUI 和 Docker 本地部署可视化 AI 大语言模型
  • C++性能优化:提升代码执行效率的核心技巧
  • 圣女司幼幽-Z-Turbo 模型:10 分钟搭建牧神记 AI 绘画工作流
  • Dubbo 服务降级与 Mock 机制实战指南
  • Java NIO 核心:Buffer 与 Channel 详解及与传统 IO 对比
  • 基于单链表的队列完整实现
  • Python 爬虫入门实战:项目驱动与核心原理
  • 数据结构与算法:递归原理及 Java 实现案例
  • Java Web 开发基础 (1):Spring Web MVC 核心注解详解
  • GitHub 2026 年 AI 项目热度分析报告
  • FPGA 与 IC 职业前景对比及选择指南
  • 金仓 KingbaseES 融合架构实践:从多库并存到一库多能
  • C++ 结构体基础用法与排序实现
  • DSPy 实战:自动化 Prompt 框架快速入门
  • Spring Cloud Alibaba AI 初体验
  • Python 爬虫架构原理与汽车之家图片爬取实战

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online