Spring Cloud Bus 简介
Spring Cloud Bus 使用轻量级的消息代理来连接微服务架构中的各个服务,可以将其用于广播状态更改(例如配置中心配置更改)或其他管理指令,本文将对其用法进行详细介绍。
我们通常会使用消息代理来构建一个主题,然后把微服务架构中的所有服务都连接到这个主题上去,当我们向该主题发送消息时,所有订阅该主题的服务都会收到消息并进行消费。使用 Spring Cloud Bus 可以方便地构建起这套机制,所以 Spring Cloud Bus 又被称为消息总线。Spring Cloud Bus 配合 Spring Cloud Config 使用可以实现配置的动态刷新。目前 Spring Cloud Bus 支持两种消息代理:RabbitMQ 和 Kafka,下面以 RabbitMQ 为例来演示下使用Spring Cloud Bus 动态刷新配置的功能。
RabbitMQ 的安装
安装 Erlang,下载地址:erlang.org/download/ot…
安装RabbitMQ,下载地址:dl.bintray.com/rabbitmq/al…
安装完成后,进入 RabbitMQ 安装目录下的 sbin 目录,在地址栏输入 cmd 并回车启动命令行,然后输入以下命令启动管理功能:
1 | $ rabbitmq-plugins enable rabbitmq_management |
访问地址查看是否安装成功:http://localhost:15672/
输入账号密码并登录:guest guest
动态刷新配置
使用 Spring Cloud Bus 动态刷新配置需要配合 Spring Cloud Config 一起使用,我们使用之前文章中的 config-server、config-client 模块来演示下该功能。
给 config-server 添加消息总线支持
在 pom.xml 中添加相关依赖
1 | <dependency> |
添加配置文件 application-amqp.yml,主要是添加了 RabbitMQ 的配置及暴露了刷新配置的 Actuator 端点;
1 | server: |
给 config-client 添加消息总线支持
在pom.xml中添加相关依赖:
1 | <dependency> |
添加配置文件 bootstrap-amqp1.yml 及 bootstrap-amqp2.yml 用于启动两个不同的 config-client,两个配置文件只有端口号不同;
1 | server: |
动态刷新配置演示
我们先启动相关服务,启动 eureka-server,以 application-amqp.yml 为配置启动 config-server,以 bootstrap-amqp1.yml 为配置启动 config-client,以 bootstrap-amqp2.yml 为配置再启动一个 config-client,启动后注册中心显示如下:
启动所有服务后,我们登录RabbitMQ的控制台可以发现Spring Cloud Bus 创建了一个叫springCloudBus的交换机及三个以 springCloudBus.anonymous开头的队列:
我们先修改 Git 仓库中 dev 分支下的 config-dev.yml 配置文件:
1 | # 修改前信息 |
调用注册中心的接口刷新所有配置:http://localhost:8904/actuator/bus-refresh
刷新后再分别调用 http://localhost:9004/configInfo 和 http://localhost:9005/configInfo 获取配置信息,发现都已经刷新了
1 | update config info for dev(dev) |
如果只需要刷新指定实例的配置可以使用以下格式进行刷新,我们这里以刷新运行在 9004 端口上的 config-client 为例 http://localhost:8904/actuator/bus-refresh/config-client:9004。
配合 WebHooks 使用
WebHooks 相当于是一个钩子函数,我们可以配置当向 Git 仓库 push 代码时触发这个钩子函数,这里以 Gitee 为例来介绍下其使用方式,这里当我们向配置仓库 push 代码时就会自动刷新服务配置了。
更多干货请移步:https://antoniopeng.com
If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !