一、简介
在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。
随着线上项目变的日益庞大,每个项目都散落着各种配置文件,如果采用分布式的开发模式,需要的配置文件随着服务增加而不断增多。某一个基础服务信息变更,都会引起一系列的更新和重启,运维苦不堪言也容易出错。配置中心便是解决此类问题的灵丹妙药。
市面上开源的配置中心有很多,BAT每家都出过,360的QConf、淘宝的diamond、百度的disconf都是解决这类问题。国外也有很多开源的配置中心Apache的Apache Commons Configuration、owner、cfg4j等等。
二、配置中心提供的核心功能
1.提供服务端和客户端支持
2.集中管理各环境的配置文件
3.配置文件修改之后,可以快速的生效
4.可以进行版本管理
5.支持大的并发查询
6.支持各种语言
Spring Cloud Config可以完美的支持以上所有的需求。
Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用
Spring cloud使用git或svn存放配置文件,默认情况下使用git,我们以git为例。
首先在github上面创建了一个文件夹 config-files用来存放配置文件,为了模拟生产环境,我们创建以下三个配置文件:
// 开发环境
mengma-config-dev.yml
// 测试环境
mengma-config-test.yml
// 生产环境
mengma-config-pro.yml
每个配置文件中都写一个属性 hello ,属性值分别是 mengma.....dev / mengma.....test / mengma.....pro 。
下面我们开始配置config server 端
config server 端代码编写
- 新建项目,引入依赖,只需要引入 config -server 就可以 ,不需要引入 eureka-client ,web
config-server
- 配置配置文件
server:
port: 8778
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: https://github.com/*** # 配置git仓库的地址
search-paths: config-files # git仓库地址下的相对地址,可以配置多个,用,分割。
username: *** # git仓库的账号
password: **** # git仓库的密码
- 启动类添加注解
@SpringBootApplication
// 声明为 config server 端
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
- 测试config server 是否生效
首先我们先要测试server端是否可以读取到github上面的配置信息,直接访问:http://localhost:8778/mengma-config/dev
返回信息如下:
{
"name": "mengma-config",
"profiles": [
"dev"
],
"label": null,
"version": null,
"state": null,
"propertySources": [
{
"name": "https://github.com/****/config-files/mengma-config-dev.yml",
"source": {
"hello": "mengma.....dev"
}
}
]
}
上述的返回的信息包含了配置文件的位置、版本、配置文件的名称以及配置文件中的具体内容,说明server端已经成功获取了git仓库的配置信息。
如果直接查看配置文件中的配置信息可访问:http://localhost:8778/mengma-config-dev.yml,
返回:
hello: mengma.....dev update、
说明 server 端会自动读取最新提交的内容。
仓库中的配置文件会被转换成web接口,访问可以参照以下的规则:
- /{application}/{profile}[/{label}]
- /{application}-{profile}.yml
- /{label}/{application}-{profile}.yml
- /{application}-{profile}.properties
- /{label}/{application}--
- {profile}.properties
以config-server-dev.yml为例子,它的 application 是 config-server,profile是dev,client会根据填写的参数来选择读取对应的配置。
以config-server-dev.yml为例子,它的application是config-server,profile是dev。client会根据填写的参数来选择读取对应的配置。
网友评论