seata分布式事务的异常

1、异常报告:Could not register branch into global session xid =xxx.xxx.xx.xxx status = Rollbacked

2、异常原因:

while expecting Begin # 描述:分支事务注册时,全局事务状态需是一阶段状态begin,非begin不允许注册。属于seata框架层面正常的处理,用户可以从自身业务层面解决。

3、出现场景: 1. 分支事务是异步,全局事务无法感知它的执行进度,全局事务已进入二阶段,该异步分支才来注册 2. 服务a rpc 服务b超时(dubbo、feign等默认1秒超时),a上抛异常给tm,tm通知tc回滚,但是b还是收到了请求(网络延迟或rpc框架重试),然后去tc注册时发现全局事务已在回滚 3. tc感知全局事务超时(@GlobalTransactional(timeoutMills = 默认60秒)),主动变更状态并通知各分支事务回滚,此时有新的分支事务来注册

4.添加事务注解的方法不是第一个执行sql语句的地方,即在方法A上添加了事务注解,但是在方法A中执行sql操作之前调用了方法B,方法B属于分支事务,方法B中的sql操作在方法A的sql操作之前执行了。

经验分享 程序员 微信小程序 职场和发展