SpringCloud Bus消息总线

概述

上一讲解的加深和扩充,一言以蔽之

  • 分布式自动刷新配置功能
  • Spring Cloud Bus配合Spring Cloud Config使用可以实现配置的动态刷新

是什么

Spring Cloud Bus配合Spring Cloud Config使可以实现配置的动态刷新。



Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的事件处理机制和消息中间件的功能。

Spring Clud Bus目前支持RabbitMQ和Kafka.

能干嘛

Spring Cloud Bus能管理和传播分布式系统间的消息,就像一个分布式执行器, 可于播状态更改、事件推送等,也可以当作微服务间的通信通道。

为什么被称为总线

什么是总线

在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题, 并让系统中所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。在总线上的各个实例,都可以方便地广播-些需要让其他连接在该主题上的实例都知道的消息。

基本原理

ConfigClient实例都监听MQ中同-个topic(默认是springCloudBus)。当一个服务刷新数据的时候,它会把这个信息放入到Topic中,这样其它监听同一Topic的服务就能得到通知,然后去更新自身的配置。

https://www. bilili.com/video/av55976700?from=search&seid= 15010075915728605208

RabbitMQ环境配置

安装Elang,下载地址

https://www.erlang.org/downloads

安装RabbitMQ,下载地址

https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.3/rabbitmq-server-3.8.3.exe

进入RabbitMQ安装目录下的sbin目录

输入以下命令启动管理功能

  • rabbitmq-plugins enable rabbitmq_management
  • 可视化插件

访问地址看是否成功安装

http://localhost:15672

输入账号并登录 guest guest

SpringCloud Bus动态刷新全局广播

必须具备良好的RabbitMQ环境

演示广播效果,增加复杂度,再以3355位模板制作一个3366

只是换个端口,其他与3355一致

设计思想

1.利用消息总线触发一个客户端/bus/refresh,从而刷新所有客户端配置

2.利用消息总线触发一个服务端ConfigServer的/bus/refresh端点,从而刷新所有客户端配置

图二的架构显然更加合适,图一不合适原因如下

  • 打破了微服务的职责单一性,因为微服务本身是业务模块,它本不应该承担配置刷新的职责
  • 破坏了微服务各节点的对等性
  • 有一定的局限性,例如,微服务在迁移时,它的网络地址常常会发生变化,此时如果想要做到自动刷新那就会增加更多的修改

给cloud-config-center-3344配置中心服务端添加消息总线支持

POM

<!-- 添加消息总线RabbitMQ支持 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

YML

server:
port: 3344 spring:
application:
name: cloud-config-center
cloud:
config:
server:
git:
#uri: git@github.com:EiletXie/config-repo.git #Github上的git仓库名字
uri: https://github.com/EiletXie/config-repo.git
##搜索目录.这个目录指的是github上的目录
search-paths:
- config-repo
##读取分支
label: master
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/ #rabbitmq相关设置 ,暴露 bus刷新配置的端点
management:
endpoints:
web:
exposure:
include: 'bus-refresh'

给cloud-config-center-3355配置中心服务端添加消息总线支持

POM

<!-- 添加消息总线RabbitMQ支持 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

YML

server:
port: 3355 spring:
application:
name: config-client
cloud:
#Config客户端配置
config:
label: master #分支名称
name: config #配置文件名称
profile: dev #读取后缀名称 上诉3个综合就是 master分支上 config-dev.yml
uri: http://localhost:3344
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/ #暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"

给cloud-config-center-3366配置中心服务端添加消息总线支持

POM

<!-- 添加消息总线RabbitMQ支持 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

YML

server:
port: 3366 spring:
application:
name: config-client
cloud:
#Config客户端配置
config:
label: master #分支名称
name: config #配置文件名称
profile: dev #读取后缀名称 上诉3个综合就是 master分支上 config-dev.yml
uri: http://localhost:3344
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/ #暴露监控端点
management:
endpoints:
web:
exposure:
include: "*"

测试

运维工程师

修改Github上配置文件增加版本号

发送Post请求

配置中心

http://lconfig-3344.com:3344/config-dev.yml

客户端

一次修改,广播通知,处处生效

SpringCloud Bus动态刷新定点通知

不想全部通知,只想定点通知

  • 只通知3355
  • 不通知3366

简单一句话

  • 指定某一实例生效而不是全部
  • 公式:http://localhost:3344/actutor/bus-refresh/
  • /bus/refresh请求不再发送到具体的服务实力上,而是发给config server通过destination参数指定需要更新配置的服务或实例

案例

我们这里以刷新3355端口上的config-client为例

  • 只通知3355
  • 不通知3366

curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3355"

通知总结All

【SpringCloud】SpringCloud Bus消息总线的更多相关文章

  1. SpringCloud系列——Bus 消息总线

    前言 SpringCloud Bus使用轻量级消息代理将分布式系统的节点连接起来.然后可以使用此代理广播状态更改(例如配置更改)或其他管理指令.本文结合RabbitMQ+GitHub的Webhook实 ...

  2. springcloud 之 bus 消息总线

    在分布式系统中,我们通常使用轻量级消息代理(rabbitmq.kafuka)建立一个公共的主题,让所有的微服务都链接进来,并且监听消费这个主题的内容,我们就称这个主题是 消息总线. (可以用作配置文件 ...

  3. 跟我学SpringCloud | 第八篇:Spring Cloud Bus 消息总线

    SpringCloud系列教程 | 第八篇:Spring Cloud Bus 消息总线 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如无特 ...

  4. SpringCloud之Config配置中心+BUS消息总线原理及其配置

    一.配置中心作用 在常规的开发中,每个微服务都包含代码和配置.其配置包含服务配置.各类开关和业务配置.如果系统结构中的微服务节点较少,那么常规的代码+配置的开发方式足以解决问题.当系统逐步迭代,其微服 ...

  5. SpringCloud(六)Bus消息总线

    Bus 消息总线 概述 分布式自动刷新配置功能 Spring Cloud Bus 配合 Spring Cloud Config使用可以实现配置的动态刷新 Bus支持两种消息代理:RabbitMQ和Ka ...

  6. SpringCloud实战8-Bus消息总线

    好了现在我们接着上一篇的随笔,继续来讲.上一篇我们讲到,我们如果要去更新所有微服务的配置,在不重启的情况下去更新配置,只能依靠spring cloud config了,但是,是我们要一个服务一个服务的 ...

  7. Spring Cloud(十一)高可用的分布式配置中心 Spring Cloud Bus 消息总线集成(RabbitMQ)

    详见:https://www.w3cschool.cn/spring_cloud/spring_cloud-jl8a2ixp.html 上一篇文章,留了一个悬念,Config Client 实现配置的 ...

  8. Spring Cloud 系列之 Bus 消息总线

    什么是消息总线 消息代理中间件构建一个共用的消息主题让所有微服务实例订阅,当该消息主题产生消息时会被所有微服务实例监听和消费. 消息代理又是什么?消息代理是一个消息验证.传输.路由的架构模式,主要用来 ...

  9. spring cloud bus 消息总线 动态刷新配置文件 【actuator 与 RabbitMQ配合完成】

    1.前言 单机刷新配置文件,使用actuator就足够了 ,但是 分布式微服务 不可能是单机 ,将会有很多很多的工程 ,无法手动一个一个的发送刷新请求, 因此引入了消息中间件 ,常用的 消息中间件 是 ...

  10. SpringCloud Bus消息总线

    在微服务架构中,通常会使用轻量级的消息代理来构建一个共用的消息主题来连接各个微服务实例,它广播的消息会被所有在注册中心的微服务实例监听和消费,也称消息总线. SpringCloud中也有对应的解决方案 ...

随机推荐

  1. 记录一下vue的插件

    2022.1.25今天记录下下载文件的插件  js-file-download  以防遗忘 首先npm install  js-file-download --save 其次引入import file ...

  2. SpringBoot(六) - 阿里巴巴的EasyExcel

    1.依赖 <!-- 阿里EasyExcel start --> <dependency> <groupId>com.alibaba</groupId> ...

  3. sax, dom, jdom技术对比

    ---- sax, dom, jdom技术的优缺点比较 SAX分析器在对XML文档进行分析时,触发一系列的事件,应用程序通过事件处理函数实现对XML文档的访问.由于事件触发本身是有时序性的,因此,SA ...

  4. OV7670寄存器说明

    I2C读出来的内容的地址,比datasheet给出的小9? add- 0x0 = 0x0add- 0x1 = 0x76add- 0x2 = 0x73add- 0x3 = 0x4add- 0x4 = 0 ...

  5. Linux软连接与硬链接的概念

  6. 【推荐】一款.NET Core开发的开源免费功能完善的医疗影像PACS系统

    项目介绍 今天给大家推荐一款开源(MIT License开源协议).免费.完善.轻量级的医疗影像PACS系统,基于.NET Core 的 DICOM SCP(Service Class Provide ...

  7. vue页面表格组件高度控制

    //浏览器窗口内部高度console.log("window.innerHeight",window.innerHeight); console.log("documen ...

  8. [文件格式/数据存储] Parquet:开源、高效的列式存储文件格式协议

    序:缘起 => 用 java 读取 parquet 文件 生产环境有设备出重大事故,又因一关键功能无法使用,亟需将生产环境的原始MQTT报文(以 parquet 文件格式 + zstd 压缩格式 ...

  9. 基于Java语言的开源能管平台才是最适合国内的能源管理平台

    在"双碳"战略背景下,能源管理已成为政府.企业实现可持续发展的必经之路.面对市场上各类能源管理平台,为何基于Java语言的开源解决方案才是最佳选择?本文将为您揭晓答案,并向您推荐我 ...

  10. Ubuntu手动安装Mysql包

    ubuntu通过tar包安装mysql5.7.21 1.下载解压命令见下: wget https://dev.mysql.com//Downloads/MySQL-5.7/mysql-5.7.21-l ...