代码地址
地址:
https://github.com/13thm/study_springcloud/tree/main/days10_Config
简介
微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以
一套集中式的、动态的配置管理设施
是必不可少的。
SpringCloud提供了ConfigServer来解决这个问题,我们每一个微服务自己带着一个application.yml,上百个配置文件的管理…
作用:
-
不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release
-
运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息
-
当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置
与GitHub整合配置
-
用你自己的账号在GitHub上新建一个名为springcloud-config的新Repository
-
拉取到本地
git clone git@github.com:13thm/springcloud-config.git
不知道为什么 这里总是拉取不下来总是超时,用了vpn还是不行…
然后后面就换到Gitee 里面试了
https://gitee.com/thmiao/springcloud-config
项目整合
-
新建Module模块cloud-config-center-3344
-
写pom
-
改yml
-
写主启动类
-
windows下修改hosts文件,增加映射
地址:
C:\Windows\System32\drivers\etc
127.0.0.1 config-3344.com
打开命令提示符(Command Prompt)或 PowerShell,以管理员身份运行。然后执行以下命令来刷新 DNS 缓存:
ipconfig /flushdns
测试
测试通过Config微服务是否可以从GitHub上获取配置内容
http://config-3344.com:3344/master/config-dev.yml
http://localhost:3344/master/config-dev.yml
/{name}-{profiles}.yml
例子:http://localhost:3344/config-dev.yml
/{label}-{name}-{profiles}.yml
例子:http://localhost:3344/master/config-dev.yml
label:分支(branch)
name :服务名
profiles:环境(dev/test/prod)
Config客户端配置与测试
-
新建cloud-config-client-3355
-
写pom
-
写bootstrap.yml(配置文件)
applicaiton.yml是用户级的资源配置项
bootstrap.yml是系统级的,优先级更加高
Spring Cloud会创建一个“Bootstrap Context”,作为Spring应用的
Application Context
的父上下文。初始化的时候,
Bootstrap Context
负责从外部源加载配置属性并解析配置。这两个上下文共享一个从外部获取的
Environment
。
-
主启动
-
业务类
测试
http://config-3344.com:3344/master/config-dev.yml
http://config-3344.com:3344/master/config-dev.yml
http://localhost:3355/configInfo
成功实现了客户端3355访问SpringCloud Config3344通过GitHub获取配置信息
Config客户端之动态刷新
问题随时而来,分布式配置的动态刷新问题
-
Linux运维修改GitHub上的配置文件内容做调整
-
刷新3344,发现ConfigServer配置中心立刻响应
-
刷新3355,发现ConfigClient客户端没有任何响应
-
3355没有变化除非自己重启或者重新加载
-
难到每次运维修改配置文件,客户端都需要重启??噩梦
避免每次更新配置都要重启客户端微服务3355
修改3355模块
1 . POM引入actuator监控
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
-
修改YML,暴露监控端口
-
业务类Controller修改
测试
访问:
http://config-3344.com:3344/master/config-dev.yml
http://localhost:3355/configInfo
修改:
- 此时修改github—> 3344 ---->3355
- 这时候访问
需要运维人员发送Post请求刷新3355
# 必须是POST请求
curl -X POST "http://localhost:3355/actuator/refresh"
这下就实现了
避免客户端都需要重启