转载

springCloud+mybatisplus+seata 1.1.0(一)

前言

前面有介绍过开源的分布式事务lcn,并基于4.1.0和5.0.2写了相应的文章,如今lcn官网发布说维护似乎成为一种问题,而seata也越来越火热,最近研究了seata源码,并集成了最新版本1.1.0(今天2020.3.16。 注意:版本不同可能会有各种奇奇怪怪的问题,所以遇到问题解决不了的时候,可以考虑是否是版本问题 ),分布式框架使用的是:

(ps:这篇文章说明是基于有一定的事务以及分布式基础的,不熟悉的还请先熟悉
 
springCloud-Greenwich.SR2 + springboot 2.1.6 + nacos 1.2.0 
+ springcloud-gateway.其中分布式事务集成了seata的AT模式,网关
gateway集成了限流,熔断,降级,并加入了时下比较流行的xxl-job做分布式任务,
安全框架使用的是oauth2+springsecurity.

seata的基本情况

seata的具体使用方式,其实 官网 其实有说明的很清楚,如果有涉及到的问题,大家可以多阅读官方文档,基本上95%你遇到的问题,别人都遇到过了,并且给了详细的解决方案,在这这篇文章里我就介绍一下seata的基本原理,然后使用我上面说的框架,集成并做一个最简单的AT模式demo.供大家参考。

首先,我们需要了解seata的3种对象:

TC: 事务协调者
    维护全局和分支事务的状态,驱动全局事务提交或回滚。

TM: 事务管理者
    定义全局事务的范围:开始全局事务、提交或回滚全局事务。

RM: 资源管理器
    管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

用我觉得描述的比较好的一个图简单描述一下这三者之间的关系:

(图片来源: https://www.sohu.com/a/326431... )

springCloud+mybatisplus+seata 1.1.0(一)

整个全局事务执行的步骤大概可以分为4步:

1. TM向TC申请开启一个全局事务,TC返回一个全局XID,这个IXD会伴随着整个分布式事务传播。
2. RM向TC注册一个属于XID的分支事务,并commit/rollback本地事务
3. TM向TC发起全局commit/rollback
4. TC调度XID下的分支事务commit/rollback
   (commit时,只用删除分支的undo_log
    rollback时,需要反向解析undo_log 并执行sql,然后删除undo_log
   )
原文  https://segmentfault.com/a/1190000022032144
正文到此结束
Loading...