SpringCloud消息总线

SpringCloud消息总线
jwangSpringCloud Bus
解决配置中心相关问题,实现配置自动更新。
注意:SpringCloudBus基于RabbitMQ实现,默认使用本地的消息队列服务,所以需要提前安装并启动RabbitMQ。
Bus简介
Bus是用轻量的消息代理将分布式的节点连接起来,可以用于广播配置文件的更改或者服务的监控管理。
Bus可以为微服务做监控,也可以实现应用程序之间互相通信。Bus可选的消息代理RabbitMQ和Kafka。
广播出去的配置文件服务会进行本地缓存。
整合案例
目标:消息总线整合入微服务系统,实现配置中心的配置自动更新。不需要重启微服务。
改造配置中心
改造步骤:
- 在config-server项目中加入Bus相关依赖
- 修改application.yml,加入RabbitMQ的配置信息,和暴露触发消息总线地址
实现过程:
(1)引入依赖
修改config-server的pom.xml引入依赖:
<!--消息总线依赖--> |
(2)修改application.yml配置文件
修改config-server的application.yml,如下配置的rabbit都是默认值,其实可以完全不配置,代码如下:
上图配置如下:
# 注释版本 |
改造用户服务
改造步骤:
1. 在用户微服务user_service项目中加入Bus相关依赖 |
实现过程:
(1)引入依赖
修改user-provider引入如下依赖:
<!--消息总线依赖--> |
(2)添加bootstrap.yml文件
在user-provider的resources目录下添加bootstrap.yml,添加rabbitmq配置,代码如下:
# 注释版本 |
(3)添加刷新配置
修改user-provider的com.jwang.controller.LoadConfigController,添加一个@RefreshScope注解刷新配置信息,代码如下:
@RefreshScope:用于启用刷新配置文件的信息。
测试
目标:当我们修改Git仓库的配置文件,用户微服务是否能够在不重启的情况下自动更新配置文件信息。
测试步骤:
(1)启动eureka-server
(2)启动config-server
(3)启动user-provider
(4)访问测试
访问<http://localhost:18081/config/load>,效果如下:
(5)修改码云配置
修改码云的配置,修改后并提交,修改如下:
(6)刷新配置
使用Postman以POST方式请求http://localhost:18085/actuator/bus-refresh
请求地址中actuator是固定的,bus-refresh对应的是配置中心的config-server中的application.yml文件的配置项include的内容
(7)刷新测试
访问<http://localhost:18081/config/load>,效果如下:
消息总线实现消息分发过程:
- 请求地址访问配置中心的消息总线
- 消息总线接收到请求
- 消息总线向消息队列发送消息
- user-service微服务会监听消息队列
- user-service微服务接到消息队列中消息后
- user-service微服务会重新从配置中心获取最新配置信息








