Spring Cloud Bus消息总线

举报
别团等shy哥发育 发表于 2023/01/13 18:58:16 2023/01/13
【摘要】 @[toc](Spring Cloud Bus消息总线) 1、Bus消息总线  Spring Cloud Bus是Spring Cloud体系内的消息总线,支持RabbitMQ和Kafka两种消息中间件。所谓消息总线,简单理解就是一个消息中心,众多微服务实例都可以连接到总线上,实例可以往消息中心发送或接收信息(通过监听)。例如:实例A发送一条消息到总线上,总线上的实例B可以接收到信息(实例B...

@[toc](Spring Cloud Bus消息总线)

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系统中

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

3.2 安装Erlang依赖包

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

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

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

3.4 复制配置文件

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

3.5 查看配置文件位置

ls /etc/rabbitmq/rabbitmq.config

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

vim /etc/rabbitmq/rabbitmq.config 

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

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

rabbitmq-plugins enable rabbitmq_management

出现如下说明:
	Enabling plugins on node rabbit@localhost:
rabbitmq_management
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@localhost...
The following plugins have been enabled:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch

set 3 plugins.
Offline change; changes will take effect at broker restart.

3.8 启动RabbitMQ的服务

systemctl start rabbitmq-server
systemctl restart rabbitmq-server
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根据你的虚拟机或者主机地址改变一下

192.168.159.2215672

在这里插入图片描述

3.11 登录管理界面

username:guest
password:guest

在这里插入图片描述

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

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

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

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

4.2 配置config server配置文件

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

在这里插入图片描述

4.3 重启config server

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

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

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

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

在这里插入图片描述

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

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

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

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

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

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

刷新所有服务:

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

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

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

6、总结

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。