在采用分布式微服务架构的系统中,由于服务数量众多,为了方便服务配置文件的统一管理,需要分布式配置中心组件。SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置
SpringCloud Config分为服务端和客户端两部分,服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口。客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息
配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-config-serverartifactId>
dependency>
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
server:
port: 8820
spring:
application:
name: cloud-config-server
cloud:
config:
server:
git:
uri: https://github.com/xxxx/springcloud-config.git #git仓库地址
default-label: master #读取分支
search-paths:
- springcloud-config #文件目录
在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
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-configartifactId>
dependency>
@SpringBootApplication
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
}
}
server:
port: 8821
spring:
application:
name: cloud-config-client
cloud:
config:
label: master
name: config
profile: prod
uri: http://localhost:8820
@RestController
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/getConfigInfo")
public String getConfigInfo() {
return configInfo;
}
}
依次启动Config Server和Config Client两个微服务,在浏览器地址栏输入http://localhost:8821/getConfigInfo
在两个微服务中引入Eureka Client依赖
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
在两个微服务配置文件中添加Eureka配置
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
并且在Config Client微服务配置文件中开启配置文件的自我发现机制
spring:
cloud:
config:
discovery:
enabled: true #开启配置服务的自动发现机制
service-id: cloud-config-server
修改git环境配置后,Config Server可以立刻获取到配置信息,Config Client服务却需要重启或重新加载才能获取到配置信息,所以就需要让Config Client动态刷新获取配置信息
在Config Client微服务中引入核心依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
在bootstrap.yml中暴露监控端口
management:
endpoints:
web:
exposure:
include: '*'
@RefreshScope
@RestController
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/getConfigInfo")
public String getConfigInfo() {
return configInfo;
}
}
重新启动微服务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地址,发现已经获取到了最新配置信息