- 概述
- Config服务端配置与测试
- Config客户端配置与测试
- Config客户端之动态刷新
文章目录
概述
分布式系统面临的配置问题
是什么
能干嘛
-
集中管理配置文件
-
不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release
-
运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心同意拉取配置自己的信息
-
当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的领域
-
将配置信息以REST接口的形式暴露
与GitHub整合配置
由于Spring Config默认使用Git来存储配置文件(也有其他方式,比如支持svn和本地文件),但推荐Git,而且使用的是 http/https 访问的形式
Config服务端配置与测试
-
在GitHub上新建一个名为springcloud-config的新Repository
-
由上一步获得刚新建的git地址
-
本地硬盘目录新建git仓库并clone
-
新建Module模块cloud-config-center-3344,即微服务的配置中心模块CloudConfig Center
-
pom
新增:
<!--config--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
-
配置文件
server:port:3344spring:application:name: cloud-config-center#注册到eureka微服务名cloud:config:server:git:uri: git@github.com:kisshotlirs/springcloud-config.git#git仓库名字search-paths:- springcloud-config#搜索目录label: master#读取分支#服务注册到eurekaeureka:client:service-url:defaultZone: http://eureka7001.com:7001/eureka/
-
主启动类
添加注解 @EnableConfigServer
-
windows下修改hosts文件,增加映射:127.0.0.1 config-3344.com
-
测试通过Config微服务是否可以从GitHub上获取配置内容
- 启动微服务
- 访问 http://config-3344.com:3344/master/config-dev.yml
-
配置读取规则:
-
/{label}/{application}-{profile}.yml
实例:master分支:http://config-3344.com:3344/master/config-dev.yml
dev分支:http://config-3344.com:3344/dev/config-dev.yml
-
/{application}-{profile}.yml
实例:http://config-3344.com:3344/config-dev.yml
-
-
成功实现了使用SpringCloud Config通过GitHub获取配置信息
Config客户端配置与测试
-
新建 cloud-config-client-3355
-
pom
<!--config client--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency>
-
bootstrap.yml
配置如下:
server:port:3355spring:application:name: config-clientcloud:config:#config客户端配置label: main#分支名称name: config#配置文件名称profile: dev#读取后缀名称 上述三个综合为 main分支上的config-dev.yml配置文件uri: http://localhost:3344#配置文件地址eureka:client:service-url:defaultZone: http://eureka7001.com:7001/eureka/
-
主启动类
注册进入服务中心:@EnableEurekaClient
-
业务类:
@RestControllerpublicclassConfigClientController{@Value("${config.info}")privateString configInfo;@RequestMapping("/configInfo")publicStringgetConfigInfo(){return configInfo;}}
-
测试
启动config配置中心 ConfigServer3344 并自测:
- http://config-3344.com:3344/master/config-prod.yml
启动3355作为Client准备访问:
- http://localhost:3355/configInfo
-
实现了客户端3355 访问config配置中心config-3344 通过github获取配置信息
-
问题出现:分布式配置的动态刷新问题:
- Linux运维修改Github上的配置文件内容做调整
- 刷新3344,发现ConfigServer配置中心立即响应
- 刷新3355,发现ConfigClient客户端没有任何响应
- 3355没有变化除非自己重启或者重新加载
Config客户端之动态刷新
避免每次更新配置都要重启客户端微服务3355
动态刷新
-
pom引入actuator服务监控
<!--actuator服务监控--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
-
修改yml,暴露监控端口
#暴露监控端点management:endpoints:web:exposure:include:"*"
-
业务类Controller修改
添加 @RefreshScope 注解
-
此时修改github上的配置文件,测试3344、3355
-
此时客户端3355并没有动态刷新,需要运维人员发送Post请求刷新客户端3355
必须是post请求:curl -X POST “http://localhost:3355/actuator/refresh”
-
再次访问客户端3355,成功实现了客户端3355刷新到最新配置内容,避免了服务重启
还存在的问题:
假设有多个微服务客户端,每个微服务都要执行一次post请求,手动刷新?(可使用脚本)
可否广播,一次通知,处处生效
可否精确通知,选择特定的微服务使其配置生效
上述问题还无法实现,所以需要引入 消息总线,和spring cloud Bus配合
热门文章
- 1月4日 - 最高速度18.9M/S,2025年Nekobox每天更新免费节点订阅地址
- 12月20日 - 最高速度20.6M/S,2024年Nekobox每天更新免费节点订阅链接
- 2月2日 - 最高速度21.5M/S,2025年Nekobox每天更新免费节点订阅地址
- 狗狗衣服裁剪视频教程(狗狗衣服裁剪视频教程大全)
- 送养一个孩子怎样写协议书呢视频(送养一个孩子怎样写协议书呢视频教程)
- 12月4日 - 最高速度19.2M/S,2024年Nekobox每天更新免费节点订阅链接
- 免费领养宠物正规网站平台下载大全视频(免费领养宠物的网站)
- 11月20日 - 最高速度19M/S,2024年Nekobox每天更新免费节点订阅链接
- 1月31日 - 最高速度21.6M/S,2025年Nekobox每天更新免费节点订阅地址
- 宠物粮品牌名称及图片大全集(宠物粮品牌起名字)