spring cloud bus消息总线

解决的痛点: 当git仓库的配置更新后,
cloud config 客户端不能获取到配置信息的问题,
需要手动发送请求,刷新配置。

可以参照 spring cloud config

cloud bus

    • bus
    • 消息总线使用rabbitMQ推送消息
    • 原理架构
    • 实现
    • 使用curl命令刷新客户端的配置

bus

bus配合config可以实现配置的动态刷新。
Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的事件处理机制和消息中间件的功能。


Bus支持两种消息代理:RabbitMQ和Kafka。


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


什么是总线:

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


基本原理:

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

消息总线使用rabbitMQ推送消息

docker 安装

# 1. 拉取镜像
docker pull rabbitmq:management# 2. 运行 5672是rabbit启动端口, 15672是web界面
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management# 3. 访问 http://[宿主机IP]:15672  
# 账号密码 guest, guest 

原理架构


刷新总配置config center, 然后其它微服务便能获取到消息了。

实现

需要给配置中心添加消息总线的支持

配置中心,和客户端需要添加rabbitMQ和bus的支持


  1. pom
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
  1. 配置中心yaml
server:port: 3344spring:application:name: cloud-config-centercloud:config:server:git:uri: https://github.com/xxx/springcloud-config.git # github url..search-paths: springcloud-config # 仓库名称# rabbitmq 相关配置 15627是web管理界面的端口, 5672 是mq访问的端口rabbitmq:host: 66.66.66.66.66port: 5672username: guestpassword: guesteureka:client:service-url:defaultZone:  http://localhost:7001/eureka# 暴露监控端点
management:endpoints:web:exposure:include: 'bus-refresh'
  1. 客户端 bootstrap.yaml 优先application.yaml加载
server:port: 3355spring:application:name: config-clientcloud:config:label: master    # 分支名称  mastername: config     # 配置文件名称前缀 config-dev.ymlprofile: dev     # 读取后缀名称   master分支config-dev.yml 会被读取uri: http://localhost:3344 # 从配置中心拿# rabbitmq 相关配置 15627是web管理界面的端口, 5672 是mq访问的端口rabbitmq:host: 66.66.66.66.66port: 5672username: guestpassword: guesteureka:client:service-url:defaultZone: http://eureka7001.com:7001/eureka# 暴露服务端口, 修改git上的配置后, 当前服务的配置不能得到同步management:endpoints:web:exposure:include: "*" # all

使用curl命令刷新客户端的配置

# 端口为配置中心服务端的端口
curl -X POST "http://localhost:3344/actuator/bus-refresh"

全部刷新和定点刷新配置。

## 全部广播
curl -X POST "http://localhost:cloud配置中心sever的端口/actuator/bus-refresh"## 广播一处
curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3366" # {destination}

更好的解决方案:

阿里dadi的nacos,可作为配置中心,而且配置信息支持存入mysql,更安全。配置信息直接可在nacos web可视化界面修改。

https://nacos.io/zh-cn/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420439.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(1290):nodejs模块化的开发导出另一种方式

demo04.js const greeting _name > hello ${_name};module.exports.greeting greeting; demo05.js const a require(./demo04.js); console.log(a); console.log(a.greeting(geyao)); 运行结果 demo04.js const greeting _name > hello ${_name}; const x 100;…

SpringCloud Stream消息驱动

为啥有这个技术&#xff1f;&#xff1f;&#xff1f; 1. 这个stream是操作消息队列的&#xff0c;简化&#xff0c;学习消息队列的成本降低。 2. 可操作rabbitMQ兔子message queue&#xff0c;kafaka&#xff0c;可理解为jdbc可操作oracle, mysql.. 3. spring家的技术学就完了…

前端学习(1291):nodejs的系统模块文件读取操作

//通过模块对模块进行引入 const fs require(fs); //读取文件 fs.readFile(./demo01.js, utf8, (err, doc) > {console.log(err);console.log(doc); }) 运行结果

解决MySQL忘记root密码

网上有很多关于忘记MySQL root密码的一些文章&#xff0c;里面都有写怎么去解决&#xff0c;但有时觉得写得太恶心&#xff0c;要么一字不漏的抄别人的&#xff0c;要么就说得不清不楚&#xff0c;好了&#xff0c;不吐槽了&#xff0c;以下是解决的整个过程。 首先我们要知道忘…

前端学习(1292):文件写入操作

const fs require(fs);fs.writeFile(./demo.txt, 即将要写入的内容, err > {if (err ! null) {console.log(err);return;}console.log(文件内容写入成功); }) 运行结果

前端学习(1293):系统模块path路径操作

//导入path模块 const path require(path); //路径拼接 const finaPath path.join(public, uploads, avater); console.log(finaPath); 运行结果

前端学习(1294):相对路径和绝对路径

const fs require(fs); const path require(path); console.log(__dirname); console.log(path.join(__dirname, ./demo01.js)); fs.readFile(path.join(__dirname, ./demo01.js), utf8, (err, doc) > {console.log(err);console.log(doc); }) 运行结果

nacos服务配置中心演示

config centerNacos作为配置中心-基础配置Nacos作为配置中心-分类配置nacos将配置持久化到mysql新型技术&#xff0c;替代spring config center & bus Nacos作为配置中心-基础配置 ⑴ module cloudalibaba-config-nacos-client3377 (2) pom <dependencies><!--n…

前端学习(1296):第三方模块nodemon

修改保存重新执行 如何断开ctrlc

note.. redis五大数据类型

redis 五大数据类型使用nosql介绍&#xff0c;由来什么是nosql阿里巴巴的架构nosql 四大分类redis入门概述redis 安装 &#xff08;docker&#xff09;基础的知识redis五大数据类型Redis-KeyStringList (列表)Set &#xff08;集合&#xff09;Hash(哈希)Zset 有序集合nosql介绍…

前端学习(1298):gulp使用

第一步安装 第二步建立文件夹 第三部 src放源代码 第四步 输入代码 执行

Sentinel 分布式系统的流量防卫兵

sentinelsentinel base服务编写关键名词解释sentinel base 官网&#xff1a; https://github.com/alibaba/Sentinel https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D 是什么&#xff1f; 是一款优秀的限流&#xff0c;降级&#xff0c;熔断的框架。 Sentinel …

前端学习(1299):gulp插件

第一步 下载 第二步 const gulp require(gulp); const htmlmin require(gulp-htmlmin);gulp.task(first, () > {console.log(第一次执行);}); gulp.task(htmlmin, () > {gulp.src(./src/*.html)//压缩去其中的代码.pipe(htmlmin({ collapseWhitespace: true })).pipe(…

前端学习(1300)报错:无法加载文件 D:\nodejs\node_global\webpack.ps1,因为在此系统上禁止运行脚本...

解决报错&#xff1a; &#xff08;1&#xff09;以管理员身份运行命令行设置即可 &#xff08;2&#xff09;在终端执行&#xff1a;get-ExecutionPolicy&#xff0c;显示Restricted&#xff08;表示状态是禁止的&#xff09; &#xff08;3&#xff09;在终端执行&#xff…

动态规划系列 | 最长上升子序列模型(上)

文章目录 最长上升子序列回顾题目描述问题分析程序代码复杂度分析 怪盗基德的滑翔翼题目描述输入格式输出格式 问题分析程序代码复杂度分析 登山题目描述输入格式输出格式 问题分析程序代码复杂度分析 合唱队形题目描述输入格式输出格式 问题分析程序代码复杂度分析 友好城市题…

前端学习(1301):gulp建立任务csso和less

const gulp require(gulp); const htmlmin require(gulp-htmlmin); const fileinclude require(gulp-file-include); const less require(gulp-less); gulp.task(first, () > {console.log(第一次执行);});gulp.task(htmlmin, () > {gulp.src(./src/*.html)//压缩去其…

前端学习(1302):实现es6的转化

const gulp require(gulp); const htmlmin require(gulp-htmlmin); const fileinclude require(gulp-file-include); const less require(gulp-less); const csso require(gulp-csso); const babel require(gulp-babel); gulp.task(first, () > {console.log(第一次执…