环境
SpringCloud:Finchley.RELEASE
SpringBoot:2.0.0.RELEASE
JDK:1.8
1. 通过Spring Cloud Bus实现动态刷新
在微服务架构中,通常会使用轻量级的消息代理来构建一个公用的消息主题来连接各个微服务实例,它广播的消息会被所以在注册中心中注册的服务监听和消费,也成为消息总线。
Spring Cloud Bus将分布式的节点用轻量的消息代理连接起来,搭建消息总线,配置Spring Cloud Config实现应用服务的配置动态刷新。
2. 消息总线整合配置中心
2.1 环境准备
- 通过docker安装RabbitMQ
dokcer pull registry.cn-beijing.aliyuncs.com/buyimoutianxia/rabbitmq:V3.7.25
docker run -it -d --name rabbitmq \
-p 5672:5672 -p 15672:15672 \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
registry.cn-beijing.aliyuncs.com/buyimoutianxia/rabbitmq:V3.7.25
2.2 Config Server改造
-
添加依赖
<!--bus 依赖--> <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> -
修改配置,增加rabbit连接信息和actuator暴露点
server: port: 5001 spring: application: name: microserver-config cloud: config: server: git: uri: https://github.com/buyimoutianxia/microservicerconfig.git rabbitmq: #rabbitmq配置 host: localhost port: 5672 username: admin password: admin #actuator暴露点 management: endpoint: endpoints: web: exposure: include: "bus-refresh"
2.3 Config Client改造
-
增加依赖
<!--bus依赖--> <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> -
修改配置,增加rabbit信息,删除refresh暴露点,采用server的暴露点刷新
spring: cloud: config: name: application #从github上获取的资源名称,没有yml后缀 profile: test #访问的配置项 label: master #访问的分支 discovery: # 开启通过微服务名称获取Config Server的信息 enabled: true service-id: microserver-config # uri: http://localhost:5001 #SpringCloud Config Server端的地址 rabbitmq: host: localhost port: 5672 username: admin password: admin #开启actuator的refresh点 #management: # endpoint: # endpoints: # web: # exposure: # include: ["refresh","info"]
2.4 动态刷新
在server端发送post请求http://localhost:5001//actuator/bus-refresh
2.5 定点刷新
只刷新指定的服务方式:发送post请求到http://${config server ip-address}:5001/actuator/bus-refresh/${config client serviceId}:${server:port},比如http://localhost:5001/actuator/bus-refresh/microservice-consumer:9001