- I have searched the issues of this repository and believe that this is not a duplicate.
Ⅰ. Issue Description
SpringBootConfigurationProvider#get(dataId) 里面 获取 ConfigConsulProperties.class 这个bean 的时候卡住一段时间,大概有30秒,导致没有及时获取到consul连接配置,consul客户端没有及时完成初始化,这导致读取consul服务上配置数据超时失败
Ⅱ. Describe what happened
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
Ⅲ. Describe what you expected to happen
Ⅳ. How to reproduce it (as minimally and precisely as possible)
分析如下:
- ConfigurationFactory load registry配置文件的时候,在seata-springbootstarter环境下会被SpringBootConfigurationProvider 代理,所以ConfigurationFactory load 的registry 配置 是 yml 文件的 seata.regitry 配置内容;
- ConfigurationFactory buildConfiguration 构造出来的配置类 也会被SpringBootConfigurationProvider代理,SpringBootConfigurationProvider 在读取 yml 中 seata.config.consul 这个配置内容时,是用 applicationContext.getBean(ConfigConsulProperties.class) 这个方式读取配置内容, 用这个方式这行getbean操作会卡住一段一时间,至少会卡住30秒以上,这样不能即使读取到consul的serveraddr配置内容,无法及时完成consulclient的初始化,也影响了 seatarm 初始化时获取配置;
- 这个问题导致 项目启动时间过长;
Ⅴ. Anything else we need to know?
Ⅵ. Environment:
- JDK version : 1.8
- OS : centos 8
- Others:
seata: seata-spring-boot-starter 1.4.2
springboot: 2.3.10.RELEASE
配置中心: consul
注册中心: consul
2条答案
按热度按时间h43kikqp1#
现在有解决方案吗? 我是不知道怎么改它 改加载顺序吗
anauzrmj2#
楼主解决了这个问题了吗?