1.1、创建config配置中心服务端工程,同时使用默认git作为存储方式。
添加依赖,pom文件如下
4.0.0 org.springframework.boot spring-boot-starter-parent2.4.9 com.kkb Config0.0.1-SNAPSHOT Config Config UTF-8 UTF-8 11 2020.0.3 org.springframework.cloud spring-cloud-config-serverorg.springframework.cloud spring-cloud-starter-netflix-eureka-clientorg.springframework.boot spring-boot-devtoolsruntime true org.projectlombok lomboktrue org.springframework.boot spring-boot-starter-testtest org.springframework.cloud spring-cloud-starter-bus-amqporg.springframework.boot spring-boot-starter-actuatororg.springframework.cloud spring-cloud-dependencies${spring-cloud.version} pom import org.springframework.boot spring-boot-maven-pluginorg.projectlombok lombok
1.2、在启动器中使用@EnableConfigServer启用ConfigServer,并使用注解@EnableDiscoveryClient来激活注册中心的客户端
1.3、配置中心服务端完整的application.yml文件
server:
port: 9006
spring:
#自动推送配置文件的配置1
rabbitmq:
host: 127.0.0.1
port: 5672 #不是15672,这个是管控台,这里是5672
username: guest # 默认就是guest,可以不配置
password: guest # 默认就是guest,可以不配置
# profiles:
# active: native #默认是从git上读取,不加这个就是从git上读取,加了就是从本地读取
application:
name: cloud-config
#配置中心服务端
cloud:
config:
server:
#从本地读取配置
#native:
#search-locations: classpath:/config_repo
git:
uri: https://gitee.com/zhang-wuming/my-config.git #配置文件所在的git仓库
username: zhang-wuming #如果是公开的仓库就不需要用户名和密码
password: 2649891840Zhang
search-paths: bill #配置文件所在目录
default-label: master #配置文件分支,如果默认分支是master也可以不用配
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:9004/eureka #向注册中心eureka注册
#自动推送配置文件的配置2
management:
endpoints:
web:
exposure:
include: bus-refresh
endpoint:
bus-refresh:
enabled: true
到此配置中心服务端就完成了,接下来就是准备配置中心客户端
2配置中心客户端2.1、在客户端的微服务中添加依赖
spring-cloud-starter-config
2.2、在配置文件中添加
spring:
application:
name: cloud-payment-service
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest # 默认就是guest,可以不配置
password: guest # 默认就是guest,可以不配置
#配置springcloud config client 配置中心客户端
cloud:
config:
uri: http://localhost:9006
profile: default
label: master
config:
import: optional:configserver:http://localhost:9006
到此配置中心客户端也完成了。
其中Spring Cloud Config 有它的一套访问规则,通过这套规则在浏览器上直接访问就可以。
比如
{application}-{profile}.yml
{label}/{application}-{profile}.yml
案例中的配置服务名为cloud-payment-service(spring.application.name=cloud-payment-service),那么我们访问的就是my-config: 配置中心微服务这个git仓库下config目录下的application.yml(所有服务重用)、cloud-payment-service.yml、cloud-payment-service-default.yml,这三个配置文件的内容,在这三个文件具有相同配置的情况下,后面的配置会覆盖前面的配置,也就是说cloud-payment-service-default.yml优先级是最高,如果有相同配置是以这个文件为主,cloud-payment-service.yml优先级是其次。
例如application.yml里保存了
key1: v1
key2: v2
key3: v3
cloud-payment-service.yml保存了
key2: value2
cloud-payment-service-default.yml里保存了
key3: value3
那么最终的配置是这三个文件的整合
结果就是
key1: v1
key2:value2
key3:value3
在前面的配置中使用的是gitee远程存储的配置,虽然git存储配置数据非常方便,但是在项目开发阶段,使用git存储还是很不方便,Spring Cloud Config支持多种配置存储方式,比如默认的git,还有本地文件存储,JDBC,Redis等存储方式,这里介绍下本地文件存储,其他存储方式,参考官方文档。
3.1配置文件
在Config Server配置文件application.yml中,配置如下。
spring:
profiles:
active: native
cloud:
config:
server:
native:
search-locations: classpath:/config_repo
Spring Cloud Config在项目启动时自动加载配置内容这一机制,导致了他的一个缺陷,配置不能自动刷新,在上述案例中,修改git仓库中的key1的值"key1=v11",发现支付服务得到的配置项key1的值还是旧的配置内容,新的内容不会自动刷新过来,在微服务架构中,动辄上百个节点如果都需要重启,这个问题非常麻烦
我们可以使用Spring Cloud Bus和Spring Boot Actuator实现自动刷新,实现原理如图。
4.1启动RabbitMQ,RabbitMQ默认的用户名和密码都是guest
4.2在配置中心服务端 添加依赖
org.springframework.cloud spring-cloud-starter-bus-amqporg.springframework.boot spring-boot-starter-actuator
4.2 配置文件
在application.yml中配置连接RabbitMQ,同时配置暴露/actuator/bus-refresh端点,代码如下
spring:
rabbitmq:
host: 192.168.56.110
port: 5672
username: guest
password: guest
management:
endpoints:
web:
exposure:
include: bus-refresh
endpoint:
bus-refresh:
enabled: true
4.3 配置中心客户端
添加依赖
org.springframework.cloud spring-cloud-starter-bus-amqp
配置文件中,在application.yml中配置连接RabbitMQ
spring:
application:
name: cloud-payment-service
rabbitmq:
host: 192.168.56.110
port: 5672
username: guest
password: guest
4.4 在对应的controller中添加注解@RefreshScope
使用@RefreshScope注解刷新更改的配置,代码如下。
4.5启动测试
启动Eureka、Config Server、支付微服务(Config Client),修改git仓库中的配置项内容后,使用Postman发送POST请求给/actuator/busrefresh(注意是是POST类型),再次访问支付服务,发现配置项已经自动刷新,请求响应是203,请求成功但没有返回内容
源码https://gitee.com/zhang-wuming/springcloud



