Alibaba微服务事务Seata源码深度剖析 - 笔记

问题

Alibaba微服务事务Seata源码深度剖析 - 笔记
模拟异常产生后,order服务正常回滚,订单没有真正被保存。
但product服务的remoteStoreService远程调用被正常执行了
Alibaba微服务事务Seata源码深度剖析 - 笔记
Alibaba微服务事务Seata源码深度剖析 - 笔记
Alibaba微服务事务Seata源码深度剖析 - 笔记

使用GlobalTransactional解决问题
Alibaba微服务事务Seata源码深度剖析 - 笔记

跑起来seata-server之后,再跑起来其他的服务

执行前:
order表
Alibaba微服务事务Seata源码深度剖析 - 笔记
product表
Alibaba微服务事务Seata源码深度剖析 - 笔记
执行后,product表也不变:
Alibaba微服务事务Seata源码深度剖析 - 笔记

seata 如何使用?文档:

Alibaba微服务事务Seata源码深度剖析 - 笔记
省略

Alibaba微服务事务Seata源码深度剖析 - 笔记
在本例中,order服务相当于RM的角色,product服务相当于TM的角色,seata-server是的角色TC,相当于协调者,决定前面两个事务是提交还是回滚。
Alibaba微服务事务Seata源码深度剖析 - 笔记

下图可理解为Spring事务核心代码的伪代码,也可以类比为seata事务的原理

有异常,则回滚;无异常,则提交
Alibaba微服务事务Seata源码深度剖析 - 笔记

Alibaba微服务事务Seata源码深度剖析 - 笔记
开启全局事务,就是往下面这张表里面写一条记录:
Alibaba微服务事务Seata源码深度剖析 - 笔记

Alibaba微服务事务Seata源码深度剖析 - 笔记
代理了原生jdbc的:

  • 用于执行sql的PrepareStatement
  • connection

Alibaba微服务事务Seata源码深度剖析 - 笔记
注册分支事务:向branch_tablelock_table分别写一条数据
Alibaba微服务事务Seata源码深度剖析 - 笔记
Alibaba微服务事务Seata源码深度剖析 - 笔记
Alibaba微服务事务Seata源码深度剖析 - 笔记

Alibaba微服务事务Seata源码深度剖析 - 笔记
Alibaba微服务事务Seata源码深度剖析 - 笔记

Alibaba微服务事务Seata源码深度剖析 - 笔记

Alibaba微服务事务Seata源码深度剖析 - 笔记
Alibaba微服务事务Seata源码深度剖析 - 笔记