目录
1. Config概述
1.1 简介
1.2 用途
2. Config服务端配置与测试
2.1 配置服务中心
2.2 配置读取规则
3. Config客户端配置与测试
3.1 配置客户端
3.2 客户端动态刷新配置
1. Config概述
1.1 简介
Spring Cloud Config,众所周知,分布式微服务的配置会随着项目的庞大变得越来越多,于是便有了Springcloud config。
分为服务端和客户端,服务端也称分布式配置中心,是个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息、加密/解密信息等访问。
客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置,并在启动时从配置中心获取和加载配置信息服务器,默认用的是Git来存储配置信息,有助于对环境进行版本管理,并且可以通过Git客户端工具来方便地管理和访问。
1.2 用途
1) 集中管理配置文件。
2) 不同环境不同配置,动态的配置更新,分环境部署如dev/test/prod/beta/release。
3) 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息。
4) 当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置。
5) 将配置信息以REST接口的形式暴露(post、curl访问刷新即可)。
2. Config服务端配置与测试
三个modules分别是:cloud-eureka-server7001,cloud-config-center-3344,cloud-config-client-3355。
2.1 配置服务中心
1) Github创建新建一个新的Repository,用来存放通用配置(比如config-dev.yml对应开发环境的通用配置):
config:
info: "just for test(config-dev.yml)."
注:
- 用GitHub Desktop创建Repository默认是Private,会导致下一步的访问配置资源404。
- 注意到这里的分支是“main”而不是“master”,cloud-config-center-3344的label可以使用“master”,但客户端的label要使用“main”。
2) 创建模块cloud-config-center-3344,配置config的uri:
server:
port: 3344
spring:
application:
name: cloud-config-center
cloud:
config:
server:
git:
uri: https://github.com/BAStriver/springcloud-test-config.git #Github上的git仓库名字
##搜索目录.这个目录指的是github上的目录 https://github.com/BAStriver/springcloud-test-config.git
search-paths:
- config-repo
##读取分支
label: master
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka/
3) 先启动cloud-eureka-server7001,再启动cloud-config-center-3344。
4) 访问:localhost:3344/main/config-dev.yml。
2.2 配置读取规则
1) /{label}/{application-{profile}.yml} :(推荐)
- master:localhost:3344/master/order-dev.yml
- dev:localhost:3344/dev/order-dev.yml
2) /{application-{profile}.yml} :访问localhost:3344/master/order-test.yml
3) /{application-{profile}{/{label}} :访问localhost:3344/order/test/master
4) 更多规则可以参考:Pattern Matching and Multiple Repositories。
3. Config客户端配置与测试
3.1 配置客户端
1) 创建模块cloud-config-client-3355,值得注意的是,这次的yml是“bootstrap.yml”。
server:
port: 3355
spring:
application:
name: config-client
cloud:
#Config客户端配置
config:
label: main #分支名称,注意到底是master还是main
name: config #配置文件名称
profile: dev #读取后缀名称
uri: http://localhost:3344
#上面4个综合起来就是 main分支上 config-dev.yml:http://localhost:3344/main/config-dev.yml
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka/
注:注意区分Github上显示的分支名称到底是“main”还是“master”。
2) 添加一个接口(启动的时候会从服务中心获取配置的信息,而在这里的configInfo直接注入):
@RestController
public class ConfigClientController {
// 因为config仓库以rest形式暴露,所以所有客户端都可以通过config服务端访问到github上对应的文件信息
@Value("${config.info}")
private String configInfo;
@GetMapping("/configInfo")
public String getConfigInfo() {
return configInfo;
}
}
3) 访问:localhost:3355/configInfo。
3.2 客户端动态刷新配置
事实上,服务中心的配置可能随时更新,这个时候,刷新3344发现ConfigServer配置中心立刻响应,刷新3355发现ConfigClient客户端没有任何响应,3355没有变化除非自己重启或者重新加载,每次都重启就显得有些不合理,于是需要引入actuator监控。
1) 修改cloud-config-client-3355的pom.xml,引入actuator监控。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2) 修改YML,暴露监控端口。
#暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
3) 这个时候重启cloud-config-client-3355,然后修改config-dev.yml,其实cloud-config-client-3355也还是不会更新配置信息,需要发送post请求刷新。
curl -X POST “http://localhost:3355/actuator/refresh”
4) 事实上,这种方式其实也并不是很好的解决方案,结合Springcloud Bus 消息总线就能更便捷地实时更新各模块的配置信息了。