分布式事务-seata原理
2023-02-03 08:30:42 11 举报
分布式事务-seata原理
作者其他创作
大纲/内容
分支回滚请求
前置镜像
前置镜像beforeImage
branch_table
RPC调用
回滚到前置镜像状态
sql类型sqlType
XID=ipAddress+\":\"+port+tranID
undolog内容
找到所有方法上有GlobalTransactional的注解
在GlobalTrancationScanner初始化的初始化了TmNettyRemotingClient客户端GlobalTrancationScanner在springBean初始之后自动调用
fengin:xid放到请求头当中
响应一个branchID
后置镜像afterImage
执行业务
出现异常
分支事务注册
分支1第一个插入操作添加insert订单表
分支2
bind
同步请求:netty调用
后置镜像
微服务
远程SetaServer创建一个GlobalSession 持久化全局事务信息保证到数据库当中(global_table)通过事务管理器TC获取xid
在PreparedStatementProxy.execute()时
execute事务处理入口
把插入之后的数据查询出来保存到afterImage当中
commit之后 插入 undolog日志
插入到global_table
处理GlobalTransactional逻辑
事务提交成功响应
DB
把undolog封装成SQLUnlog对象缓存
通过RootContext.getXid()把xid绑定到连接代理connectionProxy当中
业务表
sql操作
写入到数据库当中
doBranchRegister1.检查全局事务状态2.创建分布事务信息BranchSession(获取一个全局锁)行锁收集->rowkey
DB
xid-ip:端口:uuid
全局事务执行成功
获取事务xid
xid
删除本地undolog日志异常工作任务进行删除
本地事务的提交
发起一个syncCall(globalRollback)
获取UndoLog日志管理对象进行FlushUndoLog
select id count from storage_tbl where commodity_code =? for undate
查询更新之后的数据
表名tableName
把插入之前的数据查询出来保存到beforeImage当中
begin
收藏
0 条评论
回复 删除
下一页