一直都局限网上Demo一样的配置中心学习深度,没有实际项目经验,今天好不容易接手一个spring cloud项目的运维,可以好好玩玩,学习学习。
背景:
微服务几十个,本地开发环境不想所有服务都启动,本地CPU与内存也抗不住,于是想本地只启动要修改的服务,假设为A服务,注册中心和其他所有服务用SIT环境的,由于没有做负载均衡,所以把SIT环境的A服务停掉,启动本地的A服务,注册到SIT环境,理论上是可行的,
实际上遇到各种坑:
1.把A服务的注册中心改成SIT环境的,结果发现启动报错,一看各种配置参数找不到,肯定是获取不到配置中心的参数,日志明明打印了:Fetching config from server at http://*.*.*.*:9999/config-server,地址是对的,可就是获取不到,对照其他的,好像也没配错。
解决办法:在A服务配置加上日志信息, debug:true,重大发现,输出RestTemplate-http get http://*.*.*.*:9999/config-server/serviceA/dev,明显获取配置文件URL不对,肯定是配错了。
Spring:
application:
name: serviceA
profiles:
#本服务激活哪个环境,为SIT
active:${DEPLOYMODE:SIT}
cloud:
config:
discovery:
enabled: true
#配置中心的application Name
service-id: config-server
#获取配置中心哪个环境的配置文件,注意SIT中也可以改成${DEPLOYMODE:Dev},获取Dev的配置。
profile: ${DEPLOYMODE:SIT}
fail-fast: true
#大坑就在这里,下面这个name是获取配置文件的名称,并不是所有的服务都需要加载所有的配置,bootstrap- config,common这两个是公共配置,serviceA是本服务配置,只要加载这几个就可以吧,之前name写成了: config-server,以为跟service-id是一个东西,所以老找不到配置。
name: bootstrap-config,common,serviceA
main:
allow-bean-definition-overriding: true
debug: true
最总获取配置中心的日志为:
RestTemplate-http get http://*.*.*.*:9999/config-server/bootstrap-config,common,serviceA/SIT,服务终于可以正常启动了