![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
seata源码学习
文章平均质量分 90
秋日的晚霞
Java领域优质创作者 新星计划·第三季【Java后端】第二名
展开
-
【Seata源码学习 】篇五 注册分支事务
回到事务模版方法类TransactionalTemplate中beginTransaction 开启全局事务我们已经在上一篇看过了,最终会将TC返回到XID绑定到RootContext中,并且TC会将全局事务会话持久化,通常我们使用DB,那么将会往seata数据库的global_table中插入一条数据。接下来就要执行拦截器链路,最后一个拦截器执行完毕后如果无异常就要执行目标方法。调用目标方法通常会使用到第三方的RPC框架,例如 Fegin,RestTemplate等等。原创 2023-12-29 17:31:04 · 928 阅读 · 0 评论 -
【Seata源码学习 】篇四 TM事务管理器是如何开启全局事务
以发送GlobalBeginRequest消息为例TM在执行拦截器链路前将向TC发送GlobalBeginRequest 消息io.seata.tm.api.DefaultGlobalTransaction#begin(int, java.lang.String)注意 消息TYPE_CODE 为 MessageType.TYPE_GLOBAL_BEGIN 值为 1io.seata.tm.DefaultTransactionManager#syncCallio.seata.core.rpc.netty.原创 2023-12-27 14:55:17 · 493 阅读 · 0 评论 -
【Seata源码学习 】篇三 seata客户端全局事务开启、提交与回滚
我们已经知道 GlobalTransactionScanner 会给bean的类或方法上面标注有@GlobalTransactional 注解 和 @GlobalLock的 添加一个 advisor (DefaultPointcutAdvisor ,advisor = 绑定了PointCut 的 advise)而此处的 DefaultPointcutAdvisor 的 advice 为 GlobalTransactionalInterceptor,PointCut 为 Pointcut.TRUE(匹配原创 2023-12-27 14:54:34 · 584 阅读 · 0 评论 -
【Seata源码学习 】 篇二 TM与RM初始化过程
/调用父类构造器 用于处理消息的线程池//当前事务角色//创建 NettyClientBootstrap 实例//消息处理器//channel管理器//设置处理消息的线程池@Override//周期线程池 第一次在60秒后通过连接管理器重新建立链接,之后每10秒重新建立一次链接@Override//启动一个周期线程池,每3秒检查一次请求是否超时//启动netty客户端启动过程中一共设置了4个消息处理器IdleStateHandler 处理心跳。原创 2023-12-22 20:07:18 · 849 阅读 · 0 评论 -
【Seata源码学习 】 扫描@GlobalTransaction注解 篇一
如果你项目中使用的是MybatisPlus,那么通常会被org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor创建代理类。调用org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#createProxy,将在每个bean实例化后执行 postProcessAfterInitialization 方法,原创 2023-12-22 20:06:14 · 930 阅读 · 0 评论