无法拉取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

原因分析:

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

  1. apollo服务本身有问题:我查看apollo的日志,界面一切正常,发布和获取日志都可以
  2. 应用服务本身配置问题:我把应用jar包里所有配置都删掉,确保使用的外部配置,然而问题依然存在

一切没有头绪时,我决定仔细分析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.

总结

本次排查花了较长时间,因为对apollo配置不太熟悉,没有一开始就想到 apollo.bootstrap.eagerLoad.enabled 这个参数。
排查问题最简单快捷的方式是看错误日志,如果没有日志,要反思为什么没有日志?

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值