消息总线

1、概述

使用SpringCloud Bus配和Spring Cloud Config使用实现配置的动态刷新

Bus只支持消息处理:RabbitMQ和Kafaka。

能干嘛

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

什么是总线

在微服务架构的系统中,通常会使用轻呈级的消息代理来构建一个共用的消息主题,并让系统中所有微服务实例都连接上来。由于该主题中产生的消

息会被所有实例监听和消费,所以称它为消息总线。在总线上的各个实例,都可以方便地广播一些需要让其他连接在该主题上的实例都知道的消息。

基本原理

ConfigClient实例都监听MQ中同一个topic(默认是springCloudBus)。当一个服务刷新数据的时候,它会把这个信息放入到Topic中,这样其它监听

同一Topic的服务就能得到通知,然后去更新白身的配置。

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

2、Rabbit环境配置

进入目录输入命令

安装成功之后访问:http://localhost:15672/

默认账号密码为guest和guest登陆之后:

3、动态刷新刷新全局广播

新建一个cloud-config-client3366的模块,跟3355内容一致,端口不一致。

设计思想

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

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

对比

第二种的架构显然更加适合,第一种不适合的原因有:

a:打破了微服务的职责单一性,因为微服务本身是业务模块,他本不应该承担配置刷新的职责。

b:婆婆坏了微服务各个节点的对等性。

c:有一定的局限性,例如:微服务在迁移时,它的网络常常会发生变化,此时如果想要做到自动刷新,那就回增加更多的配置。

3344配置中心服务端模块添加消息总线支持

1、pom

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

2、yml

  ## rabbitmq的相关配置
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
## rabbitmq相关配置,暴露bus刷新配置的端点
management:
endpoints:
web:
exposure:
include: "bus-refresh"

3355和3355客户端模块添加消息总线支持

1、pom

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

2、yml

  ## rabbitmq的相关配置
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest

测试修改git中配置,然后访问curl -X POST "http://localhost:3344/actuator/refresh",调用3355接口,查看结果是否更新。。

结果:一次发送,处处生效

4、动态刷新定点通知

不想全部通知,只想定点通知,只通知一个3355,而不通知3366

简单一句话

制定具体的某一个实例生效而不是全部!

公式:http://localhost:3344/actuator/bus-refresh/{destination}

同样是发送到服务实例上,然后通过{destination}制定具体需要更新的客户端。规则:spring-application-name:端口

实例,只刷新3355客户端

通知总结:

公众号:发哥讲

这是一个稍偏基础和偏技术的公众号,甚至其中包括一些可能阅读量很低的包含代码的技术文,不知道你是不是喜欢,期待你的关注。

代码分享

https://gitee.com/naimaohome

微信公众号 点击关于我,加入QQ群,即可获取到代码以及高级进阶视频和电子书!!

img

如果你觉得文章还不错,就请点击右上角选择发送给朋友或者转发到朋友圈~

● 扫码关注我们

据说看到好文章不推荐的人,服务器容易宕机!

本文版权归 发哥讲 和 博客园 共有,原创文章,未经允许不得转载,否则保留追究法律责任的权利。

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

  1. 学习一下 SpringCloud (五)-- 配置中心 Config、消息总线 Bus、链路追踪 Sleuth、配置中心 Nacos

    (1) 相关博文地址: 学习一下 SpringCloud (一)-- 从单体架构到微服务架构.代码拆分(maven 聚合): https://www.cnblogs.com/l-y-h/p/14105 ...

  2. Spring Cloud第十二篇 | 消息总线Bus

    ​ ​本文是Spring Cloud专栏的第十二篇文章,了解前十一篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring ...

  3. SpringCloud学习系列之五-----配置中心(Config)和消息总线(Bus)完美使用版

    前言 在上篇中介绍了SpringCloud Config的使用,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的分布式配置中心( ...

  4. Spring-cloud微服务实战【十】:消息总线Bus

      回忆一下,在上一篇文章中,我们使用了分布式配置中心config来管理所有微服务的配置文件,那这样有没有什么问题?有,那就是无法配置文件无法自动更新,当我的git服务器上的配置文件更新后,不能同步更 ...

  5. SpringCloud基于消息总线的配置中心

    @https://www.cnblogs.com/ityouknow/p/6931958.html Spring Cloud Bus Spring cloud bus通过轻量消息代理连接各个分布的节点 ...

  6. springCloud学习-消息总线(Spring Cloud Bus)

    1.简介 Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控.本文要讲述的是用Spring Cloud Bus实现 ...

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

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

  8. SpringCloud入门(十): Config 统一配置中心

    SpringCloud Config 简介 在分布式系统中,由于服务组件过多,为了方便争对不通的环境下的服务配置文件统一管理,实时更新,所以出现了分布式配置中心组件.市面上开源的配置中心有很多,360 ...

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

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

随机推荐

  1. LinuX操作系统基础------>了解文件结构和相关的文件操作

    了解LinuX文件系统 熟悉LinuX的文件结构 熟悉LinuX的基本操作指令 利用所学指令进行指令组合操作 什么是文件?什么是目录? 文件:一般是一个独立的东西,可以通过某些工具将其打开 目录:可以 ...

  2. 配置Django-TinyMCE组件支持上传图片功能

    Django自带的Admin后台,好用,TinyMCE作为富文本编辑器,也蛮好用的,这两者结合起来在做博客的时候很方便(当然博客可能更适合用Markdown来写),但是Django-TinyMCE这个 ...

  3. vue 项目运行报错

    'vue-cli-service' 不是内部或外部命令,也不是可运行的程序 或批处理文件. 运行Vue项目文件的时候报如下错误 需要先用淘宝镜像来运行:cnpm install 然后运行成功后 就可以 ...

  4. Docker 搭建 Keycloak

    Docker 搭建 Keycloak 命令 需要创建好数据库,启动容器指定数据库信息 # KEYCLOAK_USER 用户名 # KEYCLOAK_PASSWORD 密码 # DB_ADDR 数据库地 ...

  5. 面试这么撩准拿offer,HashMap深度学习,扰动函数、负载因子、扩容拆分,原理和实践验证,让懂了就是真的懂!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 得益于Doug Lea老爷子的操刀,让HashMap成为使用和面试最频繁的API,没 ...

  6. [leetcode/lintcode 题解] 前序遍历和中序遍历树构造二叉树

    [题目描述] 根据前序遍历和中序遍历树构造二叉树. 在线评测地址: https://www.jiuzhang.com/solution/construct-binary-tree-from-preor ...

  7. CPU:别再拿我当搬砖工了!

    数据搬运工 Hi,我是CPU一号车间的阿Q,有段日子没见面了. 还记得上回说到咱们厂里用上了DMA技术(太慢不能忍!CPU又拿硬盘和网卡开刀了!)之后,我们总算解放了,再也不用奔波于网卡.硬盘与内存之 ...

  8. JavaScript基础-03

    1. 条件判断语句 若条件成立才会执行,条件不成立则语句不执行: if语句 语法一: if(条件表达式) {语句}          :true就执行,false不执行: 语法二: if(条件表达式) ...

  9. 可以用命令行控制eclipse断点增加删除、远程调试创建与启动的插件

    java # 创建断点(支持条件断点) curl -X PUT -H "Content-Type:application/json" --data '{"language ...

  10. 用python进行实际地址经纬度提取

    实际地址经纬度提取 请求接口: https://apis.map.qq.com/ws/place/v1/suggestion/ 所需参数: 参数名称 是否必须 参数类型 说明 keyword 是 St ...