Seata的工作原理

本文深入探讨Seata的分布式事务执行流程,包括AT模式的详细解释,如何在Debug模式下查看Seata的工作细节,以及其底层的实现原理。AT模式下,TM开启并结束分布式事务,TC协调RM进行资源的提交或回滚。此外,文章还涵盖了AT模式的两阶段提交过程和Seata的其他事务模式。
摘要由CSDN通过智能技术生成

目录

再次回顾Seata的分布式事务执行流程

AT模式详解

Debug模式下查看Seata详细工作流程

Seata底层工作原理


 

再次回顾Seata的分布式事务执行流程

 

  • TM开启分布式事务(TM向TC注册全局事务记录)
  • 按业务场景,编排数据库,服务等事务内资源(RM向TC汇报资源准备状态)
  • TM结束分布式事务,事务一阶段结束(TM通知TC提交/回滚分布式事务)
  • TC汇报事务信息,决定分布式事务是提交还是回滚
  • TC通知所有RM提交/回滚资源,事务二阶段结束

 

还是懵逼吗?结合前几篇的实例,就非常好理解了~

TM就是你添加的@GlobalTransactional注解、TC就是Seata服务器、而RM是事务的参与方(就是三个数据库中的三张表) 

 

 

AT模式详解

 

上述这种事务执行模

### Seata AT模式工作原理Seata的AT模式下,这是一种无侵入性的分布式事务解决方案[^1]。用户仅需专注于自身的“业务SQL”。当执行这些业务逻辑时,“业务SQL”的操作构成了一阶段的操作,在此期间,Seata框架自动记录全局事务所需的上下文信息。 对于二阶段处理: - **提交**:如果所有分支都成功,则整个过程透明化;即无需额外编码支持,Seata会在后台确认所有的更改。 - **回滚**:一旦某个环节失败,Seata能够利用之前保存的信息撤销已做的变更,从而保持数据的一致性[^2]。 为了实现上述功能,Seata引入了三个核心组件——TC(Transaction Coordinator)、RM(Resource Manager)以及TM(Transaction Manager),其中TC作为独立的服务端负责协调全局事务的状态管理,而RMTM则集成到了应用程序内部客户端中用于控制资源管理发起/结束事务请求。 具体来说,在一次典型的基于AT模式下的分布式事务流程里: 1. TM向TC注册新的全局事务并获取唯一ID; 2. 接着通过RM将该ID传递给各个参与方的数据源连接对象; 3. 各个参与者按照正常的业务逻辑执行更新数据库表结构或插入新纪录等动作的同时,RM会拦截对应的SQL语句,并解析出可能影响到的数据范围以便后续可能出现的补偿措施准备; 4. 当所有子操作完成后,TM通知TC尝试完成整个交易; 5. TC依据收集来的反馈决定是广播COMMIT还是ROLLBACK指令至各成员节点上的RMs去真正落实最终的结果[^3]。 ```java // 示例代码展示如何配置Spring Boot项目以启用Seata AT模式的支持 @Configuration public class DataSourceConfig { @Bean public DataSource dataSource() { DruidDataSource druidDataSource = new DruidDataSource(); // ... 设置druidDataSource属性 ... return ProxyDataSourceBuilder.create(druidDataSource).build(); // 使用代理数据源构建器创建带有Seata插件的数据源实例 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值