Spring Cloud Bus消息总线

超、凢脫俗 2022-09-10 04:29 227阅读 0赞

Spring Cloud Bus消息总线

  • 1、Bus消息总线
  • 2、实现刷新配置原理
  • 3、搭建RabbitMQ服务
    • 3.0 下载rabbitmq安装包(使用docker安装更方便)
    • 3.1 将rabbitmq安装包上传到linux系统中
    • 3.2 安装Erlang依赖包
    • 3.3 安装RabbitMQ安装包(需要联网)
    • 3.4 复制配置文件
    • 3.5 查看配置文件位置
    • 3.6 修改配置文件(参见下图:)
    • 3.7 执行如下命令,启动rabbitmq中的插件管理
    • 3.8 启动RabbitMQ的服务
    • 3.9 查看服务状态(见下图:)
    • 3.10 访问web管理界面
    • 3.11 登录管理界面
  • 4、配置统一配置中心通过Bus连接到MQ服务
    • 4.1 统一配置中心中引入Bus依赖
    • 4.2 配置config server配置文件
    • 4.3 重启config server
  • 5、配置微服务(config client)通过Bus链接MQ服务
    • 5.1 在所有微服务中引入Bus依赖
    • 5.2 在所有微服务项目中配置MQ连接配置,主要这段配置要放入远端仓库管理
    • 5.3 重启所有微服务时出现报错
    • 5.4 通过向config server 统一配置发送post方式请求实现自动配置更新
  • 6、总结

1、Bus消息总线

  Spring Cloud Bus是Spring Cloud体系内的消息总线,支持RabbitMQ和Kafka两种消息中间件。所谓消息总线,简单理解就是一个消息中心,众多微服务实例都可以连接到总线上,实例可以往消息中心发送或接收信息(通过监听)。例如:实例A发送一条消息到总线上,总线上的实例B可以接收到信息(实例B订阅了实例A),消息总线充当一个中间者的角色,使得实例A和实例B解耦,如下图所示。
在这里插入图片描述

通俗定义:bus称之为springcloud中消息总线,主要用来在微服务系统中实现远端配置更新时通过广播形式通知所有客户端刷新配置信息,避免手动重启服务的工作。

2、实现刷新配置原理

在这里插入图片描述

3、搭建RabbitMQ服务

3.0 下载rabbitmq安装包(使用docker安装更方便)

官方安装包下载:https://www.rabbitmq.com/install-rpm.html#downloads
在这里插入图片描述

3.1 将rabbitmq安装包上传到linux系统中

  1. erlang-22.0.7-1.el7.x86_64.rpm
  2. rabbitmq-server-3.7.18-1.el7.noarch.rpm

3.2 安装Erlang依赖包

  1. rpm -ivh erlang-22.0.7-1.el7.x86_64.rpm

3.3 安装RabbitMQ安装包(需要联网)

  1. yum install -y rabbitmq-server-3.7.18-1.el7.noarch.rpm
  2. 注意:默认安装完成后配置文件模板在:/usr/share/doc/rabbitmq-server-3.7.18/rabbitmq.config.example目录中,需要
  3. 将配置文件复制到/etc/rabbitmq/目录中,并修改名称为rabbitmq.config

3.4 复制配置文件

  1. cp /usr/share/doc/rabbitmq-server-3.7.18/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config

3.5 查看配置文件位置

  1. ls /etc/rabbitmq/rabbitmq.config

3.6 修改配置文件(参见下图:)

  1. vim /etc/rabbitmq/rabbitmq.config

在这里插入图片描述
将上图中配置文件中红色部分去掉%%,以及最后的,逗号 修改为下图:
在这里插入图片描述

3.7 执行如下命令,启动rabbitmq中的插件管理

  1. rabbitmq-plugins enable rabbitmq_management
  2. 出现如下说明:
  3. Enabling plugins on node rabbit@localhost:
  4. rabbitmq_management
  5. The following plugins have been configured:
  6. rabbitmq_management
  7. rabbitmq_management_agent
  8. rabbitmq_web_dispatch
  9. Applying plugin configuration to rabbit@localhost...
  10. The following plugins have been enabled:
  11. rabbitmq_management
  12. rabbitmq_management_agent
  13. rabbitmq_web_dispatch
  14. set 3 plugins.
  15. Offline change; changes will take effect at broker restart.

3.8 启动RabbitMQ的服务

  1. systemctl start rabbitmq-server
  2. systemctl restart rabbitmq-server
  3. systemctl stop rabbitmq-server

3.9 查看服务状态(见下图:)

前提是要关闭防火墙:systemctl stop firewalld
systemctl status rabbitmq-server
● rabbitmq-server.service - RabbitMQ broker
Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; disabled; vendor preset: disabled)
Active: active (running) since 三 2019-09-25 22:26:35 CST; 7s ago
Main PID: 2904 (beam.smp)
Status: “Initialized”
CGroup: /system.slice/rabbitmq-server.service
├─2904 /usr/lib64/erlang/erts-10.4.4/bin/beam.smp -W w -A 64 -MBas ageffcbf -MHas ageffcbf -
MBlmbcs…
├─3220 erl_child_setup 32768
├─3243 inet_gethost 4
└─3244 inet_gethost 4

在这里插入图片描述

在这里插入图片描述

3.10 访问web管理界面

这个ip根据你的虚拟机或者主机地址改变一下

  1. 192.168.159.2215672

在这里插入图片描述

3.11 登录管理界面

  1. username:guest
  2. password:guest

在这里插入图片描述

4、配置统一配置中心通过Bus连接到MQ服务

4.1 统一配置中心中引入Bus依赖

其实所有服务中都应该引入Bus依赖

  1. <!--引入bus依赖-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-bus-amqp</artifactId>
  5. </dependency>

4.2 配置config server配置文件

  1. #通过Bus组件连接到mq服务
  2. #mq主机
  3. spring.rabbitmq.host=192.168.159.22
  4. spring.rabbitmq.port=5672
  5. spring.rabbitmq.username=guest
  6. spring.rabbitmq.password=guest
  7. spring.rabbitmq.virtual-host=/

在这里插入图片描述

4.3 重启config server

5、配置微服务(config client)通过Bus链接MQ服务

5.1 在所有微服务中引入Bus依赖

  1. <!--引入bus依赖-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-bus-amqp</artifactId>
  5. </dependency>

5.2 在所有微服务项目中配置MQ连接配置,主要这段配置要放入远端仓库管理

在这里插入图片描述

5.3 重启所有微服务时出现报错

在这里插入图片描述
  错误原因:引入bus依赖启动立即根据配置文件bus配置连接到mq服务器,但是此时mq配置信息都在远端仓库,因此Bus连接不到mq直接报错,阻止了应用启动。
 &emsp**;解决方案**:允许项目启动时Bus组件立即连接mq这个失败,因为获取远端配置之后可以再以远端配置初始化bus组件

  1. #启动时当远端配置还没有拉取完整时,项目启动过程中的所有失败都是允许的
  2. spring.cloud.config.fail-fast=true

5.4 通过向config server 统一配置发送post方式请求实现自动配置更新

注意: /actuator/bus-refresh 必须在config server中暴露:
添加配置:

  1. #开启所有web端点暴露
  2. management.endpoints.web.exposure.include=*

刷新所有服务:

  1. http://localhost:8848(configserver地址)/actuator/bus-refresh

在这里插入图片描述
刷新指定服务:

  1. http://localhost:8848(configserver地址)/actuator/bus-refresh/服务id

6、总结

  这样的实现方式没有问题,但还是有点不足,那就是还需要在远端的配置更新之后,我们还是需要人为发送post请求,能不能做到远端配置更新时自动发送post请求呢?当然是可以的。
请看这篇Bus集成webhook实现自动刷新:https://blog.csdn.net/qq_43753724/article/details/120107658

发表评论

表情:
评论列表 (有 0 条评论,227人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Spring Cloud Bus(消息总线)(1)

    消息代理 消息代理是一种消息验证、传输、路由的架构模式。它在应用程序之间起到通信调度并最小化应用之间的依赖作用,使得应用程序可以高效地解耦通信过程。消息代理是一个中间件产