seata无限报错:

rm client is not connected. dbkey:jdbc:mysql://{mysql_ip}:3306/{server_name},clientId:{server_name}:{ip}:56136

根据错误信息,可以看出是在SeaTa的协调者(DefaultCoordinator)进行重试回滚操作时出现了问题。

具体地说,它在尝试回滚一个分布式事务时,与事务的参与者(rm client)失去了连接,导致无法完成回滚操作。

在事务尚未执行完成时,强制重启了系统或应用,导致 /bin/sessionStore/root.data 中含有回滚数据 ,但是连接的 数据库url是错误的,导致无限失败重试

解决方法:

进入seata所在目录,删除bin/sessionStore/ 目录下root.data

mv root.data root.data.bak

然后重启seata

确认正常启动后

rm root.data.bak

总结

在多数据源分布式事务下,如果应用在事务执行过程中被强制重启,还没有来得及完成事务提交或回滚操作时,可能会导致一些数据没有正确的提交或回滚,从而出现数据不一致的情况。这种情况下,可能会在/bin/sessionStore/root.data文件中留下一些回滚数据。为了避免这种情况的发生,应尽可能避免强制重启应用,同时在设计应用时,要充分考虑多数据源分布式事务的一致性和可靠性,采用合适的解决方案来保证分布式事务的正确执行。