首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >RabbitMQ分布式事务解决方案

RabbitMQ分布式事务解决方案

原创
作者头像
猿来是后端
修改2025-07-03 16:45:11
修改2025-07-03 16:45:11
2800
举报

1. 核心设计思想

代码语言:txt
复制
[主业务] --> [本地事务]
[本地事务] --> [RabbitMQ发送准备消息]
[RabbitMQ] --> [从业务]
[从业务] --> [事务协调]
[事务协调] --> [最终提交]

2. 具体实现步骤

第一步:主业务发起

主服务开启本地事务

代码语言:java
复制
@Transactional
public void createOrder() {
    // 业务逻辑...
}

记录事务状态(关键表设计)

代码语言:sql
复制
CREATE TABLE trans_coordinator (
  tx_id VARCHAR(64) PRIMARY KEY,
  status ENUM('prepared','committed','rollbacked'),
  create_time DATETIME
);

第二步:发送准备消息

发送事务准备消息

代码语言:java
复制
message.setCorrelationId(txId);
rabbitTemplate.send("prepared.exchange", 
                   "prepared.route", 
                   message);

记录事务状态

代码语言:sql
复制
UPDATE trans_coordinator 
SET status='prepared' 
WHERE tx_id='tx123';

第三步:从业务处理

从服务接收消息(幂等处理)

代码语言:java
复制
@RabbitListener(queues = "queue.prepared")
public void handle(String txId) {
    // 幂等检查
    if(checkDuplicate(txId)) return;
  
    try {
        doBiz();
        sendAck(txId);
    } catch(Exception e) {
        sendNack(txId);
    }
}

返回执行结果

代码语言:java
复制
// 成功响应
rabbitTemplate.send("ack.exchange", 
                   txId, 
                   "SUCCESS");

第四步:事务协调

接收反馈结果

代码语言:java
复制
@RabbitListener(queues = "queue.ack")
public void coordinate(String txId, String result) {
    updateTxResult(txId, result);
  
    if(allAckReceived(txId)) {
        finalCommitOrRollback(txId);
    }
}

3. 关键保障机制

代码语言:txt
复制
[定时任务] --> [扫描prepared状态]
[扫描prepared] --> [超时5分钟] --> [发起回滚]

对应的SQL检查:

代码语言:sql
复制
SELECT tx_id FROM trans_coordinator 
WHERE status='prepared' 
AND create_time < NOW()-INTERVAL 5 MINUTE;

4. 完整时序

代码语言:txt
复制
1. 主服务 -> MySQL: 开启事务
2. MySQL -> 主服务: 成功响应
3. 主服务 -> RabbitMQ: 发送准备消息
4. RabbitMQ -> 从服务: 投递消息
5. 从服务 -> RabbitMQ: 返回ACK
6. RabbitMQ -> 主服务: 反馈结果
7. 主服务 -> MySQL: 最终提交
8. MySQL -> 主服务: 确认完成

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 核心设计思想
  • 2. 具体实现步骤
    • 第一步:主业务发起
    • 第二步:发送准备消息
    • 第三步:从业务处理
    • 第四步:事务协调
  • 3. 关键保障机制
  • 4. 完整时序
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档