分布式系统中,服务数量多,为了方便服务配置文件统一管理,实时更新,需要用到分布式配置中心组件config 。支持配置服务放在配置服务的内存中,也支持放在远程Git仓库中,在spring cloud config组件中,分两个角色,一是config server,而是config client。
config server是一个可横向扩展,集中式的配置服务器,又称为分布式配置中心,是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密/解密信息等访问接口。它用于集中管理应用程序各个环境下的配置,默认使用Git存储配置文件的内容,也可以使用SVN存储,或者是本地文件存储。
config client
指的是各个微服务应用或基础设施,通过制定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。
实战篇
服务端配置:
1、导入服务端依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
</dependencies>
2、在配置中心微服务yml文件中:
server:
port: 12000
spring:
application:
name: cnooc-config #配置中心微服务
cloud:
config:
server:
git:
uri: https://gitee.com/cnooc/configee70.git
rabbitmq:
host: 192.168.25.129
management: #暴露触发消息总线的地址
endpoints:
web:
exposure:
include: bus-refresh
#POST:http://127.0.0.1:12000/actuator/bus-refresh
3、配置微服务中启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class,args);
}
}
客户端配置
1、先导入客户端依赖
<!--配置中心依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!--消息总线依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2、将客户端的application.yml文件改为bootstrap.yml
application和bootstrap 二者都代表springboot 默认配置文件,application是应用层的配置,放置一些连接数据库,redis,es等的地址端口号。
bootstrap是系统级配置,配置系统多大内存,多少连接,多少线程数,配置使用哪个配置中心。
spring:
cloud:
config:
name: base
profile: dev
label: master
uri: http://127.0.0.1:12000
存在一个问题,我们通过修改git地址的配置文件可以避免配置文件存在不同开发成员本地电脑中的问题,但是修改过后需要重新启动服务才生效这样显然不行,那么如何在修改配置文件后在不停止服务的情况下,让微服务能够重新加载最新的配置。就要用到消息总线Bus。具体的可以参考
Spring Cloud消息总线组件之 Spring Cloud Bus