目录
1. bus
简介
从 上一篇 文章可以得知 config client
服务从 config server
端获取自己对应的配置文件,但是目前的问题是:当远程 git
仓库配置文件发生改变时,每次都是需要重启 config client
服务,如果有上百上千个微服务呢?
我想我们不会一个个去重启每个微服务,也就是说如何让 config server
端通知到 config client
端?
即 config client
端如何感知到配置发生更新?
这时候就该 bus
上场了,使用 SpringCloud Bus
(国人很形象的翻译为消息总线)可以完美解决这一问题
2. bus
工作架构
大家可以将它理解为管理和传播所有分布式项目中的消息既可,其实本质是利用了 MQ
的广播机制在分布式的系统中传播消息,目前常用的有 Kafka
和 RabbitMQ
。利用 bus
的机制可以做很多的事情,其中配置中心客户端刷新就是典型的应用场景之一,我们用一张图来描述 bus
在配置中心使用的机制
- 提交配置触发
post
请求给server
端的bus/refresh
接口 server
端接收到请求并发送给SpringCloud Bus
总线SpringCloud Bus
接到消息并通知给其它连接到总线的客户端- 其它客户端接收到通知,请求
server
端获取最新配置 - 全部客户端均获取到最新的配置
它的特点:config
配置中心 server
端承担起配置刷新的职责
3. bus
消息总线的实现
项目结构依然使用上一篇的,如下
3.1. config
配置中心服务端
3.1.1. Maven
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
3.1.2. application.properties
配置文件
完整配置如下,主要增加了 rabbitmq
的配置与健康检查
server.port=8070
#注册进eureka的名称
spring.application.name=eureka-client-config
eureka.client.service-url.defaultZone=http://eureka7001:8761/eureka/
eureka.instance.prefer-ip-address=true
#gitee的仓库地址
spring.cloud.config.server.git.uri=https://gitee.com