1.4.2 seata-springbootstarter 方式集成,读取配置超时

mkh04yzy  于 2个月前  发布在  Spring
关注(0)|答案(2)|浏览(47)
  • 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)

分析如下:

  1. ConfigurationFactory load registry配置文件的时候,在seata-springbootstarter环境下会被SpringBootConfigurationProvider 代理,所以ConfigurationFactory load 的registry 配置 是 yml 文件的 seata.regitry 配置内容;
  2. ConfigurationFactory buildConfiguration 构造出来的配置类 也会被SpringBootConfigurationProvider代理,SpringBootConfigurationProvider 在读取 yml 中 seata.config.consul 这个配置内容时,是用 applicationContext.getBean(ConfigConsulProperties.class) 这个方式读取配置内容, 用这个方式这行getbean操作会卡住一段一时间,至少会卡住30秒以上,这样不能即使读取到consul的serveraddr配置内容,无法及时完成consulclient的初始化,也影响了 seatarm 初始化时获取配置;
  3. 这个问题导致 项目启动时间过长;

Ⅴ. 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
h43kikqp

h43kikqp1#

现在有解决方案吗? 我是不知道怎么改它 改加载顺序吗

anauzrmj

anauzrmj2#

楼主解决了这个问题了吗?

相关问题