概述

基本介绍

Spring Cloud Bus 目前支持两种消息代理:RabbitMQ、Kafka

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

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

什么是总线?

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

基本原理

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

使用

环境准备

  • 安装 Erlang

  • 安装 RabbitMQ:

    以 windowns 版本为例,下载安装后,进入sbin目录输入以下命令启动管理功能

    浏览器输入http://localhost:15672/ 进入管理页面(用户名密码默认都是 guest)

设计思想

bus 动态刷新全局广播有两种设计思想

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

我们采用第二种,第一种方式不适合的原因有三:

  1. 打破了微服务的职责单一性。负责业务模块的微服务不应该承担配置刷新的职责
  2. 破坏了微服务各节点的对等性
  3. 有一定的局限性。例如微服务迁移时,它的网络地址常常发生变化,如果想要做到自动刷新,还需要增加更多的配置

动态刷新全局广播配置

1、在配置中心微服务以及所有需要接收消息的客户端中导入 Maven 依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

2、添加对应配置,使其支持消息总线

########添加在配置中心、所有需要接收消息的客户端中#########

spring:
# rabbitmq相关配置,15672是web管理界面的端口,5672是mq访问的接口
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest #############添加在配置中心微服务中################ # rabbitmq相关配置,暴露bus刷新配置的端点
management:
endpoints:
web:
exposure:
include: 'bus-refresh'

3、测试,修改 github 中的配置,使用 curl 发送请求 curl -X POST http://localhost:3344/actuator/bus-refresh 后,刷新每个微服务的页面发现都已被修改。实现了一次修改,广播通知,处处生效!

动态刷新定点广播配置

如果不想全部通知,只想定点通知,上述的配置都不用变,只需要发送请求的时候在后面指定「微服名:端口」

curl -X POST http://localhost:3344/actuator/bus-refresh/{destination}

以我的为例就是:

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

流程图

1、配置中心微服务通过远程库获取配置信息,同时订阅 RabbitMQ 主题

2、客户端通过配置中心获取配置信息,同时订阅 RabbitMQ 主题

3、当我们修改远程库的配置后

4、发送 POST 请求

5、配置中心向 RabbitMQ 发送刷新事件

6、客户端监听到刷新事件

7、从配置中心拉取新的配置


获取完整代码

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

  1. SpringCloud Bus消息总线

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

  2. SpringCloud Bus消息总线简介

    简介: SpringCloud Bus配合SpringCloud Config使用可以实现配置的动态刷新 SpringCloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了 ...

  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. Spring Cloud(十一)高可用的分布式配置中心 Spring Cloud Bus 消息总线集成(RabbitMQ)

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

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

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

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

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

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

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

  10. SpringCloud学习之Bus消息总线实现配置自动刷新(九)

    前面两篇文章我们聊了Spring Cloud Config配置中心,当我们在更新github上面的配置以后,如果想要获取到最新的配置,需要手动刷新或者利用webhook的机制每次提交代码发送请求来刷新 ...

随机推荐

  1. ArcGIS Engine的安装

    1.双击安装文件“setup.exe”. 2.点击“Next”. 3.选择“ I accept the license agreement”,点击“Next”. 4.选择“Complete”,点击“N ...

  2. Springboot使用自定义注解实现简单参数加密解密(注解+HandlerMethodArgumentResolver)

    前言 我黄汉三又回来了,快半年没更新博客了,这半年来的经历实属不易,疫情当头,本人实习的公司没有跟员工共患难, 直接辞掉了很多人.作为一个实习生,本人也被无情开除了.所以本人又得重新准备找工作了. 算 ...

  3. SpringBoot使用RedisTemplate操作Redis时,key值出现 \xac\xed\x00\x05t\x00\tb

    原因分析 原因与RedisTemplate源码中的默认序列化方式有关 defaultSerializer = new JdkSerializationRedisSerializer( classLoa ...

  4. 解决Python pip安装第三方包慢的问题

    解决Python pip安装第三方包慢的问题 主要是修改源,国内的源有几个 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi ...

  5. storm学习初步

    本文根据自己的了解,对学习storm所需的一些知识进行汇总,以备之后详细了解. maven工具 参考书目 Maven权威指南 官方文档 Vagrant 分布式开发环境 博客 storm 参考书目 Ge ...

  6. My背包九讲——概述

    文章目录 什么是背包问题 背包问题的分类 [第一讲 01背包问题](https://blog.csdn.net/qq_34261446/article/details/103705068) 第二讲 完 ...

  7. 深浅clone

    原型模式 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 原型模式是基于深复制和浅复制的,在Java里面有2种复制: 浅复制将一个对象复制之后,生成一个新的对象,新对象的所有成员变量( ...

  8. 为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。 改进查找流程

    原文链接:https://www.cnblogs.com/qidian10/p/6028784.html  为防止原作者删除,留作解决方法备份 ---------------------------- ...

  9. 根据域名查注册人信息,查询邮箱下注册过哪些IP,社工渗透,获取个人信息

    根据域名查询注册人信息 举个例子.随便找一个网站 iappp.cn 通过whois查询,得到以下信息 我们可以得知这个域名的注册商(腾讯云),以及注册人真实姓名(也有可能是假的),还有注册人邮箱等等一 ...

  10. C语言一行语句太长的换行处理方法

    [toc] 1.C语言中代码的多行书写 对C语言初学者来说,编写的程序的功能很简单,一句代码很短,但是在实际开发中,参数往往很长很多,一句代码可能会很长,需要用多行才能书写. 如果我们在一行代码的行尾 ...