0
点赞
收藏
分享

微信扫一扫

无法拉取apollo配置的可能原因

问题描述

在微服务下使用携程的Apollo配置中心,在一个之前部署过的apollo的环境里增加新的配置,死活连不上Apollo里配的配置,具体表现是 apollo-cache-dir下没有任何配置文件。

apollo配置如下:

app.id=${spring.application.name}
apollo.meta=http://apollo-host:8080
apollo.cacheDir=apollo-cache-dir
apollo.cluster=default
apollo.bootstrap.enabled=true
apollo.bootstrap.namespaces=application,middleware
apollo.bootstrap.eagerLoad.enabled=true

原因分析:

我从下面的可能原因入手分析

一切没有头绪时,我决定仔细分析apollo的每个参数,看看配置是否有问题(因为这份配置在其他环境没有问题,我也没怀有多大希望)。
我发现了 apollo.bootstrap.eagerLoad.enabled这个配置,官方解释是 将Apollo配置加载提到初始化日志系统之前(1.2.0+)。

也就是说,这个参数设为 true,Apollo的加载顺序会放到日志系统加载之前,不过这会导致Apollo的启动过程无法通过日志的方式输出(因为执行Apollo加载的时候,日志系统压根没有准备好呢!所以在Apollo代码中使用Slf4j的日志输出便没有任何内容)。

难怪我一直看不到日志信息,我感觉离解决问题不远了。

我将参数设为 false,果然,启动时看到了apollo的日志:

2022-03-31 18:57:01 [main] INFO  com.ctrip.framework.foundation.internals.provider.DefaultServerProvider -Loading /opt/settings/server.properties
2022-03-31 18:57:01 [main] INFO  com.ctrip.framework.foundation.internals.provider.DefaultServerProvider -Environment is set to [Local] by property 'env' in server.properties.
2022-03-31 18:57:01 [main] WARN  com.ctrip.framework.apollo.spi.DefaultConfigFactory -==== Apollo is in local mode! Won't pull configs from remote server for namespace application ! ====
2022-03-31 18:57:01 [main] WARN  com.ctrip.framework.apollo.spi.DefaultConfigFactory -==== Apollo is in local mode! Won't pull configs from remote server for namespace middleware ! ====

人家做得很到位,还强调了2遍:Apollo is in local mode! Won't pull configs from remote server for namespace application.

就是 /opt/settings/server.properties这个配置文件导致的:

# cat /opt/settings/server.properties
env=Local

看到这里我就无语了,这是线上环境,居然有人改成这样???

我将该配置删掉,得到正常的日志:

com.ctrip.framework.foundation.internals.provider.DefaultServerProvider 
-Environment is set to null. Because it is not available in either 
(1) JVM system property 'env', (2) OS env variable 'ENV' nor (3) property 'env' from the properties InputStream.

总结

举报

相关推荐

0 条评论