seata无限报错-rm client is not connected
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文件中留下一些回滚数据。为了避免这种情况的发生,应尽可能避免强制重启应用,同时在设计应用时,要充分考虑多数据源分布式事务的一致性和可靠性,采用合适的解决方案来保证分布式事务的正确执行。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 By2Tech
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果