SpringCloud-Bus 消息总线
概述
基本介绍
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 动态刷新全局广播有两种设计思想
- 利用消息总线触发一个客户端的 /bus/refresh,进而刷新所有客户端的配置
- 利用消息总线触发一个服务端 ConfigServer 的 /bus/refresh,进而刷新所有客户端的配置
我们采用第二种,第一种方式不适合的原因有三:
- 打破了微服务的职责单一性。负责业务模块的微服务不应该承担配置刷新的职责
- 破坏了微服务各节点的对等性
- 有一定的局限性。例如微服务迁移时,它的网络地址常常发生变化,如果想要做到自动刷新,还需要增加更多的配置
动态刷新全局广播配置
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 消息总线的更多相关文章
- SpringCloud Bus消息总线
在微服务架构中,通常会使用轻量级的消息代理来构建一个共用的消息主题来连接各个微服务实例,它广播的消息会被所有在注册中心的微服务实例监听和消费,也称消息总线. SpringCloud中也有对应的解决方案 ...
- SpringCloud Bus消息总线简介
简介: SpringCloud Bus配合SpringCloud Config使用可以实现配置的动态刷新 SpringCloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了 ...
- 跟我学SpringCloud | 第八篇:Spring Cloud Bus 消息总线
SpringCloud系列教程 | 第八篇:Spring Cloud Bus 消息总线 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如无特 ...
- SpringCloud之Config配置中心+BUS消息总线原理及其配置
一.配置中心作用 在常规的开发中,每个微服务都包含代码和配置.其配置包含服务配置.各类开关和业务配置.如果系统结构中的微服务节点较少,那么常规的代码+配置的开发方式足以解决问题.当系统逐步迭代,其微服 ...
- SpringCloud(六)Bus消息总线
Bus 消息总线 概述 分布式自动刷新配置功能 Spring Cloud Bus 配合 Spring Cloud Config使用可以实现配置的动态刷新 Bus支持两种消息代理:RabbitMQ和Ka ...
- Spring Cloud(十一)高可用的分布式配置中心 Spring Cloud Bus 消息总线集成(RabbitMQ)
详见:https://www.w3cschool.cn/spring_cloud/spring_cloud-jl8a2ixp.html 上一篇文章,留了一个悬念,Config Client 实现配置的 ...
- Spring Cloud 系列之 Bus 消息总线
什么是消息总线 消息代理中间件构建一个共用的消息主题让所有微服务实例订阅,当该消息主题产生消息时会被所有微服务实例监听和消费. 消息代理又是什么?消息代理是一个消息验证.传输.路由的架构模式,主要用来 ...
- spring cloud bus 消息总线 动态刷新配置文件 【actuator 与 RabbitMQ配合完成】
1.前言 单机刷新配置文件,使用actuator就足够了 ,但是 分布式微服务 不可能是单机 ,将会有很多很多的工程 ,无法手动一个一个的发送刷新请求, 因此引入了消息中间件 ,常用的 消息中间件 是 ...
- SpringCloud系列——Bus 消息总线
前言 SpringCloud Bus使用轻量级消息代理将分布式系统的节点连接起来.然后可以使用此代理广播状态更改(例如配置更改)或其他管理指令.本文结合RabbitMQ+GitHub的Webhook实 ...
- SpringCloud学习之Bus消息总线实现配置自动刷新(九)
前面两篇文章我们聊了Spring Cloud Config配置中心,当我们在更新github上面的配置以后,如果想要获取到最新的配置,需要手动刷新或者利用webhook的机制每次提交代码发送请求来刷新 ...
随机推荐
- 软件架构的演进:单体、垂直、SOA、微服务
软件架构演进 软件架构的发展经历了从单体结构.垂直架构.SOA架构到微服务架构的过程,以下为具体分类: 1.1.1 单体架构 特点: 1.所有的功能集成在一个项目工程中. 2.所有的功能打一 ...
- 常见SQL语句和SQL基础知识
引自:http://blog.csdn.net/u012467492/article/details/46790205 SQL语句考察(一) 1.查询出每门课都大于80 分的学生姓名 name k ...
- Sql练习201908210951
表结构: create table SalePlan ( PlanId ,) primary key, GoodsId int, PlanPrice decimal(,) ); go create t ...
- python:用cv2简单实现图片的水平、垂直翻转
原图片的本地地址:D:/360Downloads/test.jpg 代码实现: # 导入cv2模块 import cv2 # 给出本地图片的地址 img_dir="D:/360Downloa ...
- 1025 PAT Ranking (25 分)
Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhe ...
- PTA数据结构与算法题目集(中文) 7-26
PTA数据结构与算法题目集(中文) 7-26 7-26 Windows消息队列 (25 分) 消息队列是Windows系统的基础.对于每个进程,系统维护一个消息队列.如果在进程中有特定事件发生, ...
- 计算机网络学习笔记NO.2 物理层
2.1 基本概念 2.1.1 物理层概念 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体. 物理层主要任务:确定与传输媒体接口有关的一些特性(定义标准) 机械特性:定 ...
- Ansible Playbook 变量与 register 详解
ansible 定义变量方式与[多层]变量引用,以及 register 详解 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录 ...
- 搭建单区域DNS服务器
搭建单区域DNS服务器 案例1:搭建单区域DNS服务器 案例2:特殊DNS解析 案例3:配置 ...
- golang--深入简出,带你用golang的反射撸一个公用后台查询方法
一些基本方法 本篇不会介绍反射的基本概念和原理等,会从每个常用的方法入手,讲解一些基本和进阶用法,反射不太适合在业务层使用,因为会几何倍的降低运行速度,而且用反射做出来的程序健壮度不高,一旦一个环节没 ...