bus消息总线
消息总线
springcloud bus 消息总线一般配合 springcloud config 一起使用
大纲:
设计思想
图一:
图二:
图一. 利用消息总线触发一个客户端/bus/refresh,而刷新所有客户端的配置
图二. 利用消息总线触发一个服务端ConfigServer的/bus/refresh端点,而刷新所有客户端的配置
图二的架构显然更加合适,图一不适合的原因如下
- 打破了微服务的职责单一性,因为微服务本身是业务模块,它不应该承担配置刷新的职责
- 打破了微服务各个节点的对等性
- 有一定的局限性。例如:微服务在迁移时,它的网络地址常常会发生变化,此时如果想要做到自动刷新,那就回增加更多的的修改
给配置中心3344添加消息总线支持
pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
application.yaml
spring:
## rabbitmq 相关配置
rabbitmq:
host: 192.168.226.128
port: 5672
username: guest
password: guest
## rabbitmq 相关配置, 暴露bus刷新配置的端点
management:
endpoints: ## 暴露bus刷新配置的端点
web:
exposure:
include: "bus-refresh"
给配置客户端3355和3366添加消息总线支持
pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
application.yaml
spring:
## rabbitmq 相关配置
rabbitmq:
host: 192.168.226.128
port: 5672
username: guest
password: guest
## 暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"
测试:
- 修改Gitee上的配置文件增加版本
- 各个配置中心的调用脚本
配置中心: http://localhost:3344/config-dev.yaml
配置client: http://localhost:3355/configInfo
配置client: http://localhost:3366/configInfo - curl -X POST “http://localhost:3344/actuator/bus-refresh”
- 查看结果,全部更新完毕
定点通知某个/些config客户端
公式:http://lcoalhost:配置中心的端口号/actuator/bus-refresh/{destination}
/bus-refresh请求不再发送到具体的服务实例上,而是发给config server 。并通过destination参数类指定需要发送更新配置的服务或者实例
如:
curl -X POST “http://localhost:3344actuator/bus-refresh/config-clent:3355”