此文章主要讲解 springcloud 中的消息总线 Bus 的相关知识。
Spring Cloud Bus
Spring Cloud Bus 是什么?
Spring Cloud Bus配置Spring Cloud Config使用可以实现配置的动态刷新。

Spring Cloud Bus 是用来分布式系统的节点和轻量级消息系统连接起来的框架,它整合了 Java 事件处理机制和
消息中间件的功能。Spring Cloud Bus 目前支持
RabbitMQ和Kafka。
Spring Cloud Bus 能干嘛?
Spring Cloud Bus 能管理和传播分布式系统间的消息,就像一个分布式执行器,可用于广播状态更改、事件推送等,也可以当做微服务间的通信通道。

为什么称为总线?
什么是总线
在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统中所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称其为消息总线。
在总线上的各个实例,都可以方便的传播一些需要让其他连接在该主题上的实例都知道的消息。
基本原理
- Config Client 实例都监听 MQ 中的同一个 Topic(默认是 SpringCloudBus)。当一个服务刷新数据的时候,其他监听到这个主题的服务就会得到通知,然后去更新自身的配置。
设计思想


根据上图我们可以看出 Spring Cloud Bus 做配置更新的步骤:
- 提交代码触发 POST 请求给 bus/refresh。
- Server 端接收到请求并发送给 Spring Cloud Bus。
- Spring Cloud Bus 接收到消息并通知给其他客户端。
- 其他客户端接收到通知,请求 Server 端获取最新配置。
- 全部客户端获取到最新的配置。
安装 RabbitMQ
windows 安装
安装 RabbitMQ 的依赖环境 Erlang 下载地址: http://erlang.org/download/otp_win64_21.3.exe
安装 RabbitMQ,下载地址: http://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.14/rabbitmq-server-3.7.14.exe
进入 rabbitMQ 安装目录的 sbin 目录下,打开 cmd 窗口,执行以下命令,启动管理功能:
1
rabbitmq-plugins enable rabbitmq_management
访问【 http://localhost:15672/ 】,输入账号和密码:默认都为 guest
在电脑服务列表里,将 RabbitMQ 启动方式改为手动
docker 方式安装
1 | docker run -d --name rabbit -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=root -p 15672:15672 -p 5672:5672 rabbitmq:management # 这里设置了默认账号密码都是root,可以自定义 |
动态刷新全局广播
必须先具备良好的 RabbitMQ 环境
还是在之前的 3344(config server)和 3355(config client)两个项目来改进。
新建模块
以 3355 为模板新建一个模块:cloud-config-client-3366
服务端修改
cloud-config-center3344
POM 添加依赖
1 | <!-- 添加rabbitMQ的消息总线支持包 --> |
YML 配置
application.yml 增加如下内容
1 | # rabbitMq的相关配置 |
客户端修改
POM 添加依赖
1 | <!-- 添加rabbitMQ的消息总线支持包 --> |
YML 配置
bootstrap.yml
1 | server: |
测试
启动相关微服务,7001/3344/3355/3366。
修改 Github 或 Gitee 上的 yml 文件,并提交。
向 config server 发送 POST 请求
1 | curl -X POST "http://localhost:3344/actuator/bus-refresh" |
注意,之前是向 config client 一个个发送请求,但是这次是向 config server 发送请求,而所有的 config client 的配置也都全部更新,一次发送,处处生效。
动态刷新定点通知
概述
有的时候,不需要在刷新服务端的时候,将与之对应的所有客户端都动态刷新,而是只需要刷新具体的某个客户端即可。
方法
发送 POST 请求到http://localhost:配置中心的端口号/actuator/bus-refresh/{destination}即可。
{destination}为 客户端微服务名称:端口号 ,微服务名称小写。


总结

发布时间: 2021-01-20
最后更新: 2024-06-24
本文标题: SpringCloud Alibaba入门到精通(十一)- 消息总线Bus(不推荐)
本文链接: https://blog-yilia.xiaojingge.com/posts/ebac9e61.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!