Could not found global transaction xid = %s问题解决方案

本文探讨了在使用分布式事务时出现XID所对应事务找不到的情况,并分析了几种可能的原因,包括服务超时、注解位置不当、强行绑定XID及服务器时间不一致等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先看到这个问题,我们可以翻译一下大致意思是,xid所对应的事务已经完成或者说结束了,所以找不到,那么究竟是什么情况会导致这个问题呢?

通过阅读官方文档里面给出了一种情况

1,超时

1)你所写的服务完成时间太长了,全局事务此时已经回滚,然后你在找能找到嘛?

2)FeginClient超时,在springboot的Application配置文件里面,我们常常会配置FeginClient的超时时间,但是服务与服务之间的调用伴随着网络,以及服务自身的增改所带来的时间问题,从而导致FeginClient超时,也会产生这种错误,可以将超时时间适当增长。

2,@GlobalTransationl和@Transationl位置产生问题

@GlobalTransationl得写在外层,不能出现在@Transationl的内层,这样也会产生此错误

3,强行获取绑定

在我遇到的一种情况中,我们的业务都没有使用@GlobalTransationl这个注解,但是却产生了xid和这个错误,看了注解,和配置发现都没啥问题,也不是单体和集群的问题,那么究竟是什么问题,不由得让我们想到,这个xid是怎么产生的,然后通过日志查看,在看了控制层,发现开发人员,写了一个方法,RootContext.getXid,且调用了bind方法,将xid与服务做了绑定。

4,服务器时间不一致

我们将做成集群之后,各个服务之间的时间可能不一致,写一个同步时间脚本就ok了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值