在一个基于微服务的在分布式系统中,业务非常的繁多,划分的微服务数量也特别的多,每个服务都有相应的配置,除了项目运行的基础配置之外,还有一些配置是与我们业务有关系的,比如说SSO存储.短信相关、邮件相关,或者一些业务上的开关。如果这么多的服务配置都单独管理的话那将是令人崩溃的一件事,所以如何能够对微服务中的配置文件做到统一集中管理、服务配置修改后无需重启就变得非常的迫切,为了解决这样的问题就需要分布式配置中心组件。
市场上的开源的配置中心有很多,如奇虎360的QConf、淘宝的diamond、百度的disconf、携程的 Apollo都是解决这类问题,在Spring Cloud中提供的配置中心组件就是Spring cloud Config了
Spring Cloud Config组件支持配置服务放在本地内存中,也支持放在远程Git或svn仓库中。在SpringCloud Config 中,外部配置主要通过两个角色来完成: 配置服务器Config Server和配置客户端Configclient。Config Server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,Config Client通过接口获取数据、并依据此数据初始化自己的应用。通过对Config Server和Config Client的配置就可以很好地对服务进行集中管理。如图:
Config Server:
Config Server是一个集中式的配置服务器,它提供配置文件的存储配置,支持本地仓库读取配置也支持远程git或svn读取存储配置,默认为git存储配置;然后以接口的形式将配置文件的内容提供出去,主要有一下功能:
- 提供用于外部配置的基于HTTP资源的AP
- 对配置文件的属性进行加密和解密
- 可轻松地使用@EnableConfigServer注解应用到Spring Boot程序中
Config Client:
Config Client 是Config Server的客户端,可以通过API接口获取Config Server 端存储的配置属性,并依据此数据初始化自己的应用,主要功能如下:
- 绑定到Config Server并使用远程属性源初始化Spring容器
- 对配置文件中的属性进行加密和解密
实现Config Server 从本地仓库读取配置文件:
本地仓库存储配置主要用于我们开发环境中的开发和调试使用,发布线上了我们就使用远程git仓库存储配置,这样我们就可以设置一个多环境配置,在本地与线上配置间来回切换。
1.搭建配置中心config server
创建一个基于springboot项目的module “config-server”配置中心,考虑到我们configserver高可用我们需要把“confioserver”注册到ureka Server中
2.添加config-server和eureka-client依赖;
3.在application.ym[中配置config信息:
4.在本地磁盘中创建配置文件
这里配置文件的命名规则: [application]-[profile].properties,配置内容如下
5.在启动类中添加@EnableConfigServer注解开启ConfigServer
6.搭建config client
其实Config Client是配置在各个业务服务项目中的,这里我们新创建一个“config-client'
微服务来连接并测试 config server。
在resource目录下创建bootstrap.yml,一定是bootstrap.yml因为bootstrap.yml的加载顺序会优先于application.yml。(这里注意下springCloud和springboot的版本,不然client无法加载bootstrap.yml文件)
在启动类中(也可以是其他的Controller中) 添加获取请求的数据
启动测试:
Config Server从git仓库中读取配置文件。
config server如果从git仓库读取配合文件的话,需要我们再git上创建一个仓库“config”,仓库如果是公开的则配置git信息的时候不需要账号密码,如果是私有的仓库则需要配置账号密码或者密钥访问。
git仓库的方式跟本地其他基本上都一样,只是配置文件要从git获取,所以需要修改下ConfigServer的配置和Config Client端的配置信息。
config server配置如下:
config client配置如下:
测试: