分布式架构的配置问题
在分布式微服务架构中,由于服务数量很多 ,使得有很多配置文件,在更新配置文件时很麻烦。
我们每个微服务自已带着一个
application.yml
,上百个配置文件的管理起来就很麻烦,所以一套集中式的、动态 的配置管理功能是必不可少的,在Spring Cloud
中,有分布式配置中心组件
Spring Cloud Config
来解决这个问题
Spring Cloud Config
概述
什么是
Spring Cloud Config
Spring Cloud Config
为微服务架构中的微服务提供
集中式的外部配置支持,
配置服务器为
各个不同微服务
应用
的所有环境提供了一个
中心化的外部配置
Spring Cloud Config
分为
服务端与客户端
两个部分:
服务端
config server
:
也称为
分布式配置中心,它是一个独立的微服务应用
,用来连接配置服务器并为客户端提供获取配置信息,加密、解密信息等访问接口。
配置服务器官方推荐采用
Git
来存储配置信息,这样就有助于对环境配置进行版本管理,并且可通过
Git客户端工具来方便的管理与访问配置信息。
客户端
config client
:
通过指定的服务端来管理服务的资源,以及与业务相关的配置内容,并在启动的时候从服务端获取和加载配置信息。
作用
集中管理配置文件
不同环境不同配置,动态化的配置更新,根据不同环境部署,如
dev/test/prod运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置,服务会向配置中心统一拉取自已的配置信息当配置发生变动时,服务不需要重启即可感知到配置的变化并使用修改后的配置信息将配置信息以REST
接口的形式暴露
与
GitHub
整合配置信息
由于
Spring Cloud Config
官方推荐使用
Git
来管理配置文件(也可支持其他方式,如:
SVN
和本地文件),而且使用https/http
访问的形式。
Spring Cloud Config
服务端配置
创建配置文件与提交
Github
登录 GitHub
,新建一个
microservice
-
cloud
-
config
仓库
注册:
https://github.com/join?source=experiment-header-dropdowns-home
登录:
https://github.com/login
新建仓库
:
https://github.com
2.
拷贝
https
的
git
仓库地址:
https://github.com/XXXXXX/microservice-cloud-config.git
克隆远程库到本地仓库
本地库路径:
D:\gitStudy\SpringCloud
git
命令:
git clone https://github.com/XXXXXXXX/microservice
-
cloud
-
config.git
.
在
D:\gitStudy\SpringCloud\microservice-cloud-config
中
,
新建一个
microservice
-
config
-
application.yml
配置内容如下(
选择
UTF-8
编码保存文件
)
选择
UTF-8
编码保存文件
将
application.yml
推送到
github
远程库
推送远程库会弹出提示登录
github
查看
Github
仓库中的效果
新建
Config
服务端模块
(
配置中心
)
创建
microservice-cloud-11-config-server-5001
模块
配置
pom.xml
文件
添加配置
完整配置
配置
application.yml
文件
创建启动类与添加注解
@EnableConfigServer
配置读取规则
参考 :
https://cloud.spring.io/spring-cloud-static/Finchley.SR2/single/spring-cloud.html
#_quick_start
测试
Config
配置中心是否可以从
GitHub
上获取配置信息
启动
Config
配置中心服务
5001
访问测试配置(
dev
):
http://localhost:5001/microservice-config-application-dev.yml
访问正式配置(
prod
):
http://localhost:5001/microservice-config-application-prod.yml
访问
不存在
配置:
http://localhost:5001/microservice-config-application-test.yml
Spring Cloud Config
客户端服务
新建
Config
客户端模块
创建模块:
microservice-cloud-12-config-client-8080
配置
pom.xml
文件
配置
bootstrap.yml
application.yml
是用户级别的配置项
bootstrap.yml
是系统级别的配置项,
优先级更高
Spring Cloud
会创建一个
Bootstrap Context
,
Bootstrap Context
会负责从外部资源加载配置属性并解析
配置;
Bootstrap
属性有高优先级,默认情况下,它们不会被本地配置覆盖。
在类路径
resources
下创建
bootstrap.yml
配置文件
,
内容如下:
上面配置的读取配置文件相关配置
配置
application.yml
在类路径
resources
下创建
application.yml
,内容如下
读取
GitHub
上的配置信息
新建
ConfigClient
类,通过
Rest
方式验证是否能够读取到
GitHub
上的配置信息
通过
@Value("key
值
")
绑定
GitHub
中对应配置中的
key
所对应的
value
值。
创建启动类
功能测试
启动
Config
配置中心
config-server-5001
并自测:
http://localhost:5001/application-dev.yml
启动
Config
客户端
config-client-8080
访问
http://localhost:8080/config
,
访问不到。
上面访问不到,是因为
bootstrap.yml
中的
profile
值是什么,决定从
GitHub
上读取什么配置信息上
当
profile: prod
prod
在
GitHub
配置中对应端口号为
4002
访问路径:
http://localhost:4002/config
当
profile: dev
dev
在
GitHub
配置中对应端口号为
4001
所以访问:
http://localhost:4001/config
成功实现
Config
客户端 去访问
Config
配置服务中心,从而通过
GitHub
获取到配置信息
Spring Cloud Config
配置实战
需求分析
将创建一个
Eureka
服务与
Product
商品提供者服务,它们两个微服务的配置信息均从
GitHub
获取 ,从而实现统一配置分布式管理,完成多环境的变量。
需求实战步骤
编辑
Eureka
配置并提交远程库
在
D:\gitStudy\SpringCloud\microservice
-
cloud
-
config
目录下
新建
microservice
-
config
-
eureka.yml
文件
,
内容如下:
profile: dev
禁用了自我保护机制
, profile: prod
开启了自我保护机制
将
application.yml
推送到
github
远程库
编辑
Product
配置并提交远程库
在
D:\gitStudy\SpringCloud\microservice
-
cloud
-
config
目录下
新建
microservice
-
config
-
product.yml
文件
,
内容如下:
不同环境 数据名不一样,
dev
数据库使用
springcloud_db01, prod
数据库使用
springcloud_db02
将
application.yml
推送到
github
远程库
构建
Config
版的
Eureka
服务端
新建模块
microservice-cloud-13-eureka-config-6001
配置
pom.xml
文件
在
resources
目录下创建并配置
bootstrap.yml
文件
在
resources
目录下创建并配置
application.yml
创建启动类
EurekaServer_Config_6001
标识注解:
@EnableEurekaServer
功能测试
先启动
Config
配置中心
: microservice-cloud-11-config-server-5001
再启动
Eureka
注册中心
: microservice-cloud-13-eureka-config-6001
访问:
http://eureka6001.com:6001/
根据
bootstrap.yml
文件中的
profile: dev,
所以是禁止了自我保护机制
构建
Config
版的
Product
微服务
参考
microservice-cloud-03-provider-product-8001
,
新建
microservice
-
cloud
-
14
-
product
-
config
-
8001
工程
配置
pom.xml
文件
在
resources
目录下创建并配置
bootstrap.yml
文件
在
resources
目录下创建并配置
application.yml
文件
创建启动类
标识注解:
@EnableEurekaClient
拷贝
microservice-cloud-03-provider-product-8001
里的其他业务逻辑代码与
MyBatis
相关配置文件
功能测试
先启动
Config
配置中心
:
microservice-cloud-11-config-server-5001
再启动
Eureka
注册中心:
microservice-cloud-13-eureka-config-6001
再启动 商品提供者:
microservice-cloud-14-product-config-8001
访问:
http://localhost:8001/product/get/1
根据
bootstrap.yml
文件中的
profile: dev
,所以查询结果中显示的库名为
springcloud_db01