Alibaba微服务事务Seata源码深度剖析 - 笔记
问题
模拟异常产生后,order服务正常回滚,订单没有真正被保存。
但product服务的remoteStoreService远程调用被正常执行了
使用GlobalTransactional
解决问题
跑起来seata-server之后,再跑起来其他的服务
执行前:
order表
product表
执行后,product表也不变:
seata 如何使用?文档:
省略
在本例中,order
服务相当于RM的角色,product
服务相当于TM的角色,seata-server
是的角色TC,相当于协调者,决定前面两个事务是提交还是回滚。
下图可理解为Spring事务核心代码的伪代码,也可以类比为seata事务的原理
有异常,则回滚;无异常,则提交
开启全局事务,就是往下面这张表里面写一条记录:
代理了原生jdbc的:
- 用于执行sql的PrepareStatement
- connection
注册分支事务:向branch_table
和lock_table
分别写一条数据