最近项目中考虑引入seata作为分布式事务解决方案,最开始我们是用springboot的yml配置文件作为配置中心,并做了压测,效果符合理想,后来参照官网高可用部署方式,我们用consul作为配置中心,就出现问题了,业务项目启动不起来,一直卡在读取配置,就像这样:
ERROR 45365 --- [ main] io.seata.config.ConfigFuture : config operation timeout,cost:5000 ms,op:GET,dataId:transport.threadFactory.workerThreadPrefix ERROR 45365 --- [ main] io.seata.config.ConfigFuture : config operation timeout,cost:5003 ms,op:GET,dataId:transport.threadFactory.shareBossWorker ERROR 45365 --- [ main] io.seata.config.ConfigFuture : config operation timeout,cost:5000 ms,op:GET,dataId:transport.type ERROR 45365 --- [ main] io.seata.config.ConfigFuture : config operation timeout,cost:5001 ms,op:GET,dataId:transport.threadFactory.workerThreadSize
上面这个错误,断点调试 发现最开始是在SpringBootConfigurationProvider#get(dataId) 里面 获取 ConfigConsulProperties.class 这个bean 的时候卡住一段时间,大概有30秒,导致没有及时获取到consul连接配置,consul客户端没有及时完成初始化,这导致读取consul服务上配置数据超时失败,但是疑惑的是,后来consul客户端完成了初始化后,consul客户端从注册中心获取seata服务确总是失败,一直出现下面的错误,无法完成启动
ERROR 45365 --- [eoutChecker_2_1] i.s.c.r.netty.NettyClientChannelManager : no available service found in cluster 'kun-ming', please make sure registry config correct and keep your seata server running ERROR 45365 --- [eoutChecker_1_1] i.s.c.r.netty.NettyClientChannelManager : no available service found in cluster 'kun-ming', please make sure registry config correct and keep your seata server running
我们事务组的配置如下: service.vgroupMapping.ji9_tx_group = kun-ming
注册中心该服务其实是存在的
我期望这个错误不应该存在,应该按照配置,能够在注册中心找到服务,期望这个问题尽快修复
最后我在ConsulRegisttryServiceImpl#refreshCluster(cluster) 方法中发现了问题, refreshCluster(cluster) -调用-> getHealthyServices(getClusterName(), -1, -1) 其实getHealthService方法的service 参数应该使用上层方法refreshCluster(cluster) 传入的cluster 参数,而不应该从getClusterName() 获取服务名,因为getClusterName()获取的服务名是本地文件配置的。
环境信息
JDK version : 1.8 OS : centos 8 Others: seata: seata-spring-boot-starter 1.4.2 springboot: 2.3.10.RELEASE 配置中心: consul 注册中心: consul
原提问者GitHub用户Amountsen
粗略看了下,好像是存在问题,因为传入的cluster,但是用的却是getClusterName(),从本地读了clsutername,而不是getServiceGroup,或者直接使用cluster,我来处理,希望你有空可以参与测试,谢谢反馈
原回答者GitHub用户a364176773
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。