SEATA事务分析-启动流程事务注解拦截分析( 一)

带着问题了解Seata原理

1、Spring事务类型有哪几种?
1、在Spring启动过程中是如何将事务方法织入到Aop拦截器中的?
2、SpringBoot的Seata事务是如何传递的?
3、SpringCloud如何实现Seata客户端事务传递?
4、Seata事务传递如何保证线程安全?
5、Seata的执行入口是什么?
6、Seata的是如何实现数据源代理的?
7、A服务->B服务,A服务->C服务,C出错,B服务时如何回滚的?
8、如果在提交事务阶段时,网络抖动如何保证数据一致性?
9、Seata的TM、RM、TC如何通信?

说明

GlobalTransactionScanner 事务扫描器

一、事务扫描器设计图

GlobalTransactionScanner事务扫描器

二、组件说明

GlobalTransactionScanner扫描器继承及实现了SpringBoot的组件
继承组件:
AbstractAutoProxyCreator
实现组件:
DisposableBean,ApplicationContextAware,InitializingBean

1.AbstractAutoProxyCreator

创建动态代理对象

2.DisposableBean:

在Bean生命周期结束前调用destory()方法做一些收尾工作,亦可以使用destory-method。

3.InitializingBean:

接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的子类,在初始化bean的时候会执行该方法。

4.ApplicationContextAware

Spring的IOC容器

三、流程分析

1.ApplicationContextAware

设置容器配置

2.AbstractAutoProxyCreator

重写wrapIfNecessary
1.设置事务类型拦截器
设置事务拦截器
2.判断方法是否有事务或者锁注解
判断方法是否有事务或者锁注解

3.设置Bean的代理信息
在这里插入图片描述

3.InitializingBean

通过实现InitializingBean有了afterPropertiesSet初始化方法
tc客户端初始化
初始化连接RM,TM
在这里插入图片描述

4.DisposableBean

销毁实例信息

GlobalTransactionalInterceptor 事务拦截器

一、事务拦截器设计图

Spring事务注解拦截入口

二、组件说明

GlobalTransactionalInterceptor 扫描器实现了SpringBoot的组件
实现组件:
MethodInterceptor

1、MethodInterceptor 方法拦截器

在spring boot下有两种方式设置AOP(实现织入weave):

  1. 使用@Aspect注解
  2. 使用DefaultPointcutAdvisor

三、流程分析

1、MethodInterceptor

当方法上含有GlobalTransactional或者GlobalLock注解时会被注入到Aop拦截代理中,当执行方法前会调用GlobalTransactionalInterceptor中MethodInterceptor的invoke实现
执行事务相关信息

2.封装事务执行器

事务模板方法执行事务执行器

3.transactionalTemplate执行excute方法内容

在这里插入图片描述

4.事务类型

事务类型
PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。

事务传播模式方式1
事务传播模式处理方案1
事务传播模式方式2
事务传播模式处理方案2

分布式事务开始以及业务代码执行和回滚

1、向Tm发送事务信息
2、执行业务代码
3、业务出错通知tm,tm通知所有tc回滚
4、业务执行成功通知tm执行完成,tm通知其他tc提交事务
事务开始以及业务执行

欢迎各位技术大佬加微沟通,加微请注明来自 CSDN,如需转载请联系作者本人并注明原文章链接地址

欢迎添加作者微信技术讨论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值