seata源码-入门

本文从客户端视角出发,探索seata如何在业务应用启动后处理分布式事务。通过GlobalTransactionAutoConfiguration和GlobalTransactionScanner,seata在service方法上创建动态代理,拦截并处理事务。包括开启全局事务、执行业务逻辑、事务回滚和提交的过程。核心逻辑涉及ThreadLocal、netty请求的发送。
摘要由CSDN通过智能技术生成

开始记录seata的源码学习笔记,这篇博客主要先记录源码的入门,简单先看下,源码要从哪里入手
对于seata,是用来处理分布式事务的框架,其实简单来说,就是一个Java应用,我们在使用的时候,需要先启动seata的服务端代码,本质上就是一个main方法,这篇博客,先不看这个逻辑,我们先看下在业务代码中,使用了seata之后,在业务应用启动后,接口被调用时,seata是如何作用于方法调用过程的

seata入口

在业务应用中,使用seata,比较简单,需要引入seata相关的jar包,然后在需要使用分布式事务的service方法 加上 @GlobalTransactional(name = “create-order”,rollbackFor = Exception.class)注解即可

那当业务应用在启动的时候,seata是如何生效的?
在引入seata的jar包之后,会自动注入一个bean

com.alibaba.cloud.seata.GlobalTransactionAutoConfiguration

在这里插入图片描述

这个bean就是相对比较核心的一个bean

GlobalTransactionAutoConfiguration

这个类,是通过springboot的自动注入,引入的,在这个bean中,通过@Bean的形式,注入了另外一个bean:GlobalTransactionScanner
在这里插入图片描述

通过下面这个图,我们可以发现,这个bean:GlobalTransactionScanner,间接的实现了后置处理器的接口,同时,继承了AbstractAutoProxyCreatore,AbstractAutoProxyCreatore 这个bean,其实就是spring中,处理切面和事务时,用来生成动态代理对象的后置处理器,在这个bean的postProcessAfterInitialization方法中,完成了对代理对象的生成
而GlobalTransactionScanner类,覆写了postProcessAfterInitialization这个方法中调用的wrapIfNecessary()方法
在这里插入图片描述

在覆写的wrapIfNecessary()方法中,完成了对分布式事务中,service需要生成动态代理对象的处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值