3

基于Spring Cloud的配置中心

 2 years ago
source link: https://fishermartyn.github.io/blog/ConfigServer-with-Spring-Cloud/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

微服务 • 分布式 • Spring

基于Spring Cloud的配置中心

fisherMartyn bio photo By fisherMartyn 2017-01-29

Spring Cloud Config是Spring Cloud的配置中心,可以解决Spring boot环境的配置问题;另外由于其本身以接口的方式提供了配置相关的数据,因此也可以支持其它环境中集中式的配置管理。

看了下Spring的文档和demo,觉得并没有起到用一个简单demo来介绍清楚是什么的目的,因此也就有了这篇博客。本文试图用最简单的文档和demo来讲清楚Spring cloud config的核心功能。

Spring cloud配置中心的核心模块主要有三个:

  1. Server模块
  2. Client模块

甚至如果从配置中心,而不是使用者的角度讲,只包括上面的1和2。

因为配置中心应该负责:提供配置文件的存储、以接口的形式将配置文件的内容提供出去。而客户端如何通过接口获取数据、并依据此数据初始化自己的应用,原则上是客户端自己去考虑的事情。

很多应用都将配置文件跟随源码打包发布、版本管理,这种方式相对于集中式的配置文件仓库也有很多弊端,例如生产/测试环境等管理混乱、易出错,与docker等环境兼容性差等。

理想的情况是运行环境和代码一致、采用集中式的配置中心、通过简单配置来区分环境。

配置文件的底层存储使用文件或者git等。配置文件的形式只需要遵循简单的规范,例如本demo使用的配置代码仓库

Server模块

通过Spring Boot应用和Spring Cloud提供的注解,可以用非常少的代价来部署一个配置中心的Server,主要工作包括:

  1. 配置用于提供Server服务的代码仓库(即上述1的uri)
  2. 指定提供服务相关的端口号,如果没有反向代理的话,要跟client一起定,防止端口冲突等问题。
  3. 通过@EnableConfigServer注解来提供服务。

相关的demo可以参考:ConfigServer

启动成功后,可以通过访问本地服务来测试服务是否正常,例如:

$ curl http://localhost:10086/app2/dev
{"name":"app2","profiles":["dev"],"label":"master","version":"7ce00583cd328c51af64a3f85412d7203608e616","state":null,"propertySources":[{"name":"https://github.com/fisherMartyn/config-repo/app2-dev.properties","source":{"redis.passwd":"dev","redis.name":"dev"}}]}

Client模块

Client模块主要是配置中心的主要消费者,通过配置中心的数据来初始化自身的Enviroment环境和相关变量,主要工作包括:

  1. 指定App Name和active Profile,用于获取特定的配置文件。
  2. 指定配置中心的uri信息
  3. 通过Environment变量或者Value注解等方式来获取配置信息。

主要注意的是,注意区别spring boot程序中bootstrap配置和application配置的关系,client的信息必须写在bootstrap里。

相关的demo可以参考:configclient

Demo中写了相关的Rest接口来测试获取的配置信息是否正确,启动成功后,可以进行测试:

$ curl http://localhost:8080/r
dev
dev

高层次内容

除了上述最简单的内容外,个人觉得配置中心还涉及以下两个方面的内容:

  1. 高可用。 作为集中式管理的核心环节,一旦挂掉后果不堪设想。这个话题可能涉及到可用性自检、故障报警、客户端缓存等手段。
  2. 通知下发。服务端配置文件的变更应该准实时的推送给客户端。这个有现成实现。

相关参考:

  1. http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html
  2. https://segmentfault.com/a/1190000006138698
  3. http://www.jianshu.com/p/69dea19abf04

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK