微服务 SpringCloud Config分布式配置中心
1. Config概述
1.1 Config简介
分布式配置中心解决的就是面对微服务集群实现对配置的统一管理,避免每个项目都需要单独的配置文件,面对成百上千的服务器,每次修改配置都会带来巨大的工作量,而且存在配错的风险。
SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供一个中心话的外部配置。
SpringCloud Config分为服务端与客户端两部分。服务端连接GitHub上定义的配置,客户端通过服务端获取配置信息。
1.2 Config使用场景
1.3 Config与GitHub整合配置
由于SpringCloud Config默认使用Git来存储配置文件(也有其它方式,比如支持svn和本地文件,但最推荐的还是Git,而且使用的是http/https访问的形式)
1.4 Config官网
2. Config服务端配置
2.1 Config官方配置
配置文件名称格式要与官网要求保持一致。
3. Config客户端配置
3.1 Config配置文件
4. Config客户端动态刷新
4.1 动态刷新配置方式一
动态刷新配置方式一
微服务 SpringCloud Bus消息总线
方式一是利用SpringCloud Config,消息总线Bus与RabbitMQ,刷新ConfigServer,达到一次刷新,所有客户端获取到最新配置信息。
动态刷新配置方式二
是单纯的刷新ConfigClient,只有当前被刷新的配置客户端才能获取到最新配置。
4.2 动态刷新配置方式二
修改客户端模块
1.引入依赖spring-boot-starter-actuator
2.修改yml,暴露监控端口。
3.@RefreshScope业务类Controller修改。
4.刷新客户端接口,必须是Post请求,curl -X POST “http://localhost:3355/actuator/refresh”
5. Config案例验证
git源码地址:https://github.com/zrj-coder/cloudboot3
5.1 Config服务端
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cloudboot3</artifactId>
<groupId>com.hello.springcloud</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-config-center-3344</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
yml
server:
port: 3344
spring:
application:
name: cloud-config-center #注册进Eureka服务器的微服务名
cloud:
config:
server:
git:
uri: https://github.com/zrj-coder/springcloud-config.git #GitHub上面的git仓库名字
####搜索目录
search-paths:
- springcloud-config
####读取分支
label: master
#服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
启动类
/**
* @author zrj
* @date 2021/2/4
* @since V1.0
**/
@EnableConfigServer
@SpringBootApplication
public class ConfigCenterApplication3344 {
public static void main(String[] args) {
SpringApplication.run( ConfigCenterApplication3344.class, args );
}
}
5.2 Config客户端
pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cloudboot3</artifactId>
<groupId>com.hello.springcloud</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-config-client-3355</artifactId>
<dependencies>
<!--添加消息总线RabbitMQ支持-->
<!--<dependency>-->
<!--<groupId>org.springframework.cloud</groupId>-->
<!--<artifactId>spring-cloud-starter-bus-amqp</artifactId>-->
<!--</dependency>-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
bootstrap.yml
server:
port: 3355
spring:
application:
name: config-client
cloud:
#Config客户端配置
config:
label: master #分支名称
name: config #配置文件名称
profile: dev #读取后缀名称 上述3个综合:master分支上config-dev.yml的配置文件被读取http://config-3344.com:3344/master/config-dev.yml
uri: http://localhost:3344 #配置中心地址k
#服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
# 暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
启动类
/**
* @author zrj
* @date 2021/2/4
* @since V1.0
**/
@EnableEurekaClient
@SpringBootApplication
public class ConfigClientApplication3355 {
public static void main(String[] args) {
SpringApplication.run( ConfigClientApplication3355.class, args );
}
}
控制类
/**
* @author zrj
* @date 2021/2/4
* @since V1.0
**/
@RefreshScope
@RestController
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/configInfo")
public String getConfigInfo() {
return configInfo;
}
}