网站首页 > 博客文章 正文
在 Seata 分布式事务框架中,Resource Manager (RM) 负责本地事务的管理,包括事务的提交和回滚。RM 通常指的是分布式系统中的数据库、消息队列、缓存等资源管理器。以下是 RM 本地事务管理的基本流程和关键点:
- 事务注册:
- 当一个全局事务开始时,TC(Transaction Coordinator)会通知 RM 注册该事务。
- RM 会为该全局事务创建一个分支事务 ID(Branch Transaction ID, BTID),并与全局事务 ID(GTID)关联。
- 本地事务执行:
- RM 在执行本地事务时,会根据 BTID 获取全局事务的状态。
- 如果全局事务处于提交状态,RM 执行本地事务的提交操作;如果全局事务处于回滚状态,RM 执行本地事务的回滚操作。
- 本地事务提交:
- 在执行本地事务后,RM 向 TC 发送本地事务提交请求。
- TC 收到所有参与者的提交请求后,会确认全局事务的提交状态,并通知所有参与者进行本地事务的提交。
- 本地事务回滚:
- 如果全局事务需要回滚,TC 会通知 RM 进行本地事务的回滚操作。
- RM 根据 BTID 执行本地事务的回滚操作,撤销之前的数据变更。
- 补偿事务:
- 在 SAGA 模式中,如果某个本地事务失败,RM 需要执行补偿事务来恢复之前的状态。
- 补偿事务通常是针对原事务的逆操作,如撤销订单、恢复库存等。
- 日志记录:
- RM 会记录本地事务的执行日志,包括事务的状态、操作、结果等信息。
- 这些日志用于事务的回滚和补偿操作,以及故障排查和审计。
在实际应用中,RM 本地事务的管理通常通过数据库的 JDBC 驱动、消息队列的客户端库或缓存的管理接口来实现。Seata 提供了对多种 RM 的支持,包括关系型数据库(如 MySQL、PostgreSQL 等)、消息队列(如 RabbitMQ、Kafka 等)和缓存(如 Redis 等)。
以下是一个简化的代码示例,展示了 RM 本地事务管理的流程:
@Service
public class ResourceManagerService {
@Autowired
private TransactionCoordinator tc;
public void executeLocalTransaction(Long userId, Long productId) {
// 1. 获取全局事务和分支事务 ID
GlobalTransaction globalTransaction = tc.getGlobalTransaction();
BranchTransactionId branchTransactionId = tc.getBranchTransactionId();
// 2. 执行本地事务
// ...
// 3. 发送本地事务提交请求
tc.sendLocalTransactionCommitRequest(globalTransaction, branchTransactionId);
}
public void rollbackLocalTransaction(Long userId, Long productId) {
// 1. 获取全局事务和分支事务 ID
GlobalTransaction globalTransaction = tc.getGlobalTransaction();
BranchTransactionId branchTransactionId = tc.getBranchTransactionId();
// 2. 执行本地事务回滚
// ...
// 3. 发送本地事务回滚请求
tc.sendLocalTransactionRollbackRequest(globalTransaction, branchTransactionId);
}
}
请注意,这个代码示例仅为示意,实际的实现可能需要根据具体业务场景和 RM 的类型进行调整。在实际应用中,RM 本地事务的管理需要与 Seata 的分布式事务框架紧密集成,以确保分布式事务的一致性和正确性。
猜你喜欢
- 2024-10-08 峰哥分享:分布式事务Seata AT模式源码解读(一)
- 2024-10-08 分布式事务解决方案之 Alibaba Seata
- 2024-10-08 分布式事务Seata源码解析二:Seata Server启动时都做了什么
- 2024-10-08 分布式事务 Seata(分布式事务seata缺点)
- 2024-10-08 深度剖析 Seata TCC 模式【图解 + 源码分析】
- 2024-10-08 不要光说理论,分布式事务2阶段提交理论的落地方案seata
- 2024-10-08 「推荐」阿里开源的分布式事务框架 Seata
- 2024-10-08 Seata 环境搭建(seata部署在docker)
- 2024-10-08 「每日背一句Day 107」Will you take a seat at the head of
- 2024-10-08 Seata AT 模式实现两个服务间分布式事务
你 发表评论:
欢迎- 07-07Xiaomi Enters SUV Market with YU7 Launch, Targeting Tesla with Bold Pricing and High-Tech Features
- 07-07Black Sesame Maps Expansion Into Robotics With New Edge AI Strategy
- 07-07Wuhan's 'Black Tech' Powers China's Cross-Border Push with Niche Electronics and Scientific Firepower
- 07-07Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!
- 07-07IT运维必会的30个工具(it运维工具软件)
- 07-07开源项目有你需要的吗?(开源项目什么意思)
- 07-07自动化测试早就跑起来了,为什么测试管理还像在走路?
- 07-07Cursor 最强竞争对手来了,专治复杂大项目,免费一个月
- 最近发表
-
- Xiaomi Enters SUV Market with YU7 Launch, Targeting Tesla with Bold Pricing and High-Tech Features
- Black Sesame Maps Expansion Into Robotics With New Edge AI Strategy
- Wuhan's 'Black Tech' Powers China's Cross-Border Push with Niche Electronics and Scientific Firepower
- Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!
- IT运维必会的30个工具(it运维工具软件)
- 开源项目有你需要的吗?(开源项目什么意思)
- 自动化测试早就跑起来了,为什么测试管理还像在走路?
- Cursor 最强竞争对手来了,专治复杂大项目,免费一个月
- Cursor 太贵?这套「Cline+OpenRouter+Deepseek+Trae」组合拳更香
- 为什么没人真的用好RAG,坑都在哪里? 谈谈RAG技术架构的演进方向
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)