概况
Spring Cloud Config为微服务架构中的微服务提供集中化的外部部署支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。
Spring Cloud Config分为服务端和客户端两部分,服务端也称为分布式配置中心,他是一个独立的微服务应用,用来连接配置服务器应为客户端提供获取配置信息,加密/解密信息等访问接口。
客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载信息配置服务器,默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。
作用
- 集中管理配置文件
- 不同环境不同配置,动态化的配置更新,分环境比如dev/test/prod/beta/release
- 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务回想配置中心统一拉取自己的信息
- 当配置发生改变时,服务不需要重启即可感知到配置的变化并应用新的配置
- 将配置信息一REST接口的形式暴露(POST/CRUL访问刷新即可)
配置
服务端
Maven
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
YML配置
server:
port: 3344
spring:
application:
name: config-center
cloud:
config:
server:
git:
uri: https://github.com/mj164499472/springcloud-config.git
search-paths:
- springcloud-config
label: master
#rabbitmq相关配置,15672是web端口,5672是访问端口
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
##rabbitmq相关配置,暴露bus刷新配置的端点
management:
endpoints:
web:
exposure:
include: "bus-refresh"
主启动类添加注解:@EnableConfigServer
通过以上配置就可通过访问服务的方式获取到GitHub上的配置内容,例如http://localhost:3344/master/config-dev.yml
读取配置规则:/{lable}/{application}-{profile}.yml、/{application}-{profile}.yml、/{application}-{profile}/lable
**lable:**分支(branch)
**application:**服务名
**profile:**环境(dev/test/prod)
客户端
Maven
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
server:
port: 3355
spring:
application:
name: config-client
cloud:
config:
label: master
name: bootstrap
profile: dev
uri: http://localhost:3344 #配置中心地址
#rabbitmq相关配置,15672是web端口,5672是访问端口
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
#暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
注意,bootstrap.yml的优先级最高
通过以上配置,可以简单实现客户端从服务端获取配置信息(配置中心),而服务端是从GitHub上面拉取配置信息,实现了统一管理。
配置动态刷新
当我们修改GitHub上面的配置的时候,再通过服务器去访问会发现服务端可以获取到最新的配置信息,然后我们通过客户端去访问服务端的时候,却发现获取到的配置信息却不是最新,这里需要配置动态刷新(其实上面的YML文件中就有配置过)
客户端引入actuator监控模块
Maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
通过配置YML,暴露监控端口
#暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
然后通过CMD命令:curl -X POST"http://localhost:3355/actuator/refresh"即可完成刷新
但是这也并不是最优方案,后续中会通过消息总线来进行广播刷新