1. 概述
在采用分布式微服务架构的系统中,由于服务数量众多,为了方便服务配置文件的统一管理,需要分布式配置中心组件。SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置 SpringCloud Config分为服务端和客户端两部分,服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口。客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息 配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容
1.1. Config配置中心功能
- 集中管理配置文件
- 不同环境不同配置,动态化的配置更新,分环境部署
- 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息
- 当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置
- 将配置信息以REST接口的形式暴露
2. 搭建Config Server服务
2.1. 引入核心依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
2.2. 编写主启动类
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
2.3. 编写application.yml配置
server:
port: 8820
spring:
application:
name: cloud-config-server
cloud:
config:
server:
git:
uri: https://github.com/xxxx/springcloud-config.git
default-label: master
search-paths:
- springcloud-config
2.4. 验证
在git仓库springcloud-config目录下新建配置文件config-prod.yml,并添加配置信息
config:
info: "master branch,springcloud-config/config-prod.yml version=1"
启动Config Server微服务,在浏览器地址栏输入地址http://localhost:8820/master/config-prod.yml
3. 搭建Config Client服务
3.1. 引入核心依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
3.2. 编写主启动类
@SpringBootApplication
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
}
3.3. 编写bootstrap.yml配置
server:
port: 8821
spring:
application:
name: cloud-config-client
cloud:
config:
label: master
name: config
profile: prod
uri: http://localhost:8820
3.3. 编写测试接口类
@RestController
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/getConfigInfo")
public String getConfigInfo() {
return configInfo;
}
}
3.4. 验证
依次启动Config Server和Config Client两个微服务,在浏览器地址栏输入http://localhost:8821/getConfigInfo
4. 结合Eureka自动发现
4.1. 引入核心依赖
在两个微服务中引入Eureka Client依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
4.2. 编写配置文件
在两个微服务配置文件中添加Eureka配置
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
并且在Config Client微服务配置文件中开启配置文件的自我发现机制
spring:
cloud:
config:
discovery:
enabled: true
service-id: cloud-config-server
5. Config Client动态刷新
修改git环境配置后,Config Server可以立刻获取到配置信息,Config Client服务却需要重启或重新加载才能获取到配置信息,所以就需要让Config Client动态刷新获取配置信息
5.1. 引入核心依赖
在Config Client微服务中引入核心依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
5.2. 修改bootstrap.yml配置文件
在bootstrap.yml中暴露监控端口
management:
endpoints:
web:
exposure:
include: '*'
5.3. 在接口类中加入注解
@RefreshScope
@RestController
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/getConfigInfo")
public String getConfigInfo() {
return configInfo;
}
}
5.4. 验证
重新启动微服务Config Client,修改git上配置信息版本号为2,访问Config Server服务http://localhost:8820/master/config-prod.yml 再访问http://localhost:8821/getConfigInfo,发现配置信息并没有更新,发送POST请求(curl -X POST “http://localhost:8821/actuator/refresh”)刷新Config Client 再次访问http://localhost:8821/getConfigInfo地址,发现已经获取到了最新配置信息
|