首页 > 其他分享 >Spring Cloud Bus消息总线

Spring Cloud Bus消息总线

时间:2023-02-13 11:32:55浏览次数:44  
标签:配置文件 Spring 配置 rabbitmq server Bus config Cloud


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解耦,如下图所示。

Spring Cloud Bus消息总线_rabbitmq

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

2、实现刷新配置原理

Spring Cloud Bus消息总线_spring cloud_02

3、搭建RabbitMQ服务

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

官方安装包下载:​​https://www.rabbitmq.com/install-rpm.html#downloads​

Spring Cloud Bus消息总线_消息队列_03

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

Spring Cloud Bus消息总线_rabbitmq_04


将上图中配置文件中红色部分去掉​​%%​​​,以及最后的​​,​​逗号 修改为下图:

Spring Cloud Bus消息总线_spring cloud_05

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


Spring Cloud Bus消息总线_spring cloud_06

Spring Cloud Bus消息总线_spring cloud_07

3.10 访问web管理界面

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

192.168.159.22:15672

Spring Cloud Bus消息总线_rabbitmq_08

3.11 登录管理界面

username:guest
password:guest

Spring Cloud Bus消息总线_spring cloud_09

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=/

Spring Cloud Bus消息总线_配置文件_10

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连接配置,主要这段配置要放入远端仓库管理

Spring Cloud Bus消息总线_配置文件_11

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

Spring Cloud Bus消息总线_rabbitmq_12


  错误原因:引入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

Spring Cloud Bus消息总线_rabbitmq_13


刷新指定服务:

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

6、总结

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


标签:配置文件,Spring,配置,rabbitmq,server,Bus,config,Cloud
From: https://blog.51cto.com/u_15961549/6053842

相关文章

  • SpringCloud 微服务工具集总结
    文章目录​​1、微服务​​​​2、为什么要用微服务?​​​​2.1优势:​​​​2.2缺点:​​​​3、SpringCloud微服务工具集​​​​4、SpringCloud工具集核心组件​​​​4.......
  • Spring Cloud Gateway(微服务网关)
    文章目录​​1、什么是服务网关?​​​​1.1说明​​​​1.2为什么需要网关?​​​​1.3网关组件在微服务中的架构​​​​2、服务网关组件Gateway​​​​2.1SpringClou......
  • 在低代码开发平台 ILLA Cloud 中使用 Hugging Face 上的模型
    ILLACloud是一个面向开发者的开源低代码开发平台,平台专注于帮助开发者快速建立企业内部应用,为开发者节约数据调用与页面设计的时间。平台具有面向开发者、数据整合、协......
  • Java:SpringBoot整合Sharding-Jdbc实现数据库读写分离
    读写分离实现效果:写操作使用master主库,读操作使用slave从库依赖<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId>......
  • 7 种提升 Spring Boot 吞吐量技巧
    7种提升SpringBoot吞吐量技巧!一、异步执行实现方式二种:1、 使用异步注解@aysnc、启动类:添加@EnableAsync注解;2、 JDK8本身有一个非常好用的Future类——Com......
  • Spring事务管理嵌套事务详解 : 同一个类中,一个方法调用另外一个有事务的方法
    Spring事务机制回顾  Spring事务一个被讹传很广说法是:一个事务方法不应该调用另一个事务方法,否则将产生两个事务. 结果造成开发人员在设计事务方法时束手束脚,生怕一不......
  • spring 知识点
    概述以及IOC理论推导Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。Spring框架是一个分层架构,由7个定义良好的模块组成。Spring模块构建在核心容器......
  • 【SpringBoot】Session共享
    本文参考SpringBoot一个依赖搞定session共享,没有比这更简单的方案了!在传统的单服务架构中,只有一个服务器,那就不会存在session共享的问题,但如果在分布式/集群项目......
  • Spring boot 学习笔记:第十章--实现AcApp端
    开启最后一章的学习java-jarmatchingsystem.jar启动jar包ctrl+shift+r浏览器强制刷新重新打包的流程app.vue删去div.windows标签。style加上scoped属......
  • SpringBoot项目启动后再请求远程接口的实现方式
    场景有一个SpringBoot项目需要在启动后请求另一个远程服务拿取配置,而不是加载过程中去请求,可能会出现类没有实例化的场景,因此需要实现项目完全启动后再进行请求的场景......