1、消息总线Bus

(1)基本概念与原理
总线:

  • 在为服务架构中使用轻量级的消息代理来构建一个公用的消息主题,并让系统中所有的微服务实例都连接,该主题中产生的消息会被所有的实例监听和消费,所以称为消息总线。

消息总线Bus:

  • 概念:配合spring cloud config实现配置的自动动态刷新,支持RabbitMQ和Kafka消息中间件;
  • 原理:ConfigClient实例监听MQ中同一个topic(默认SpringCloudBus),当一个服务刷新数据时候,就会把这个信息放入topic,这样它监听的同一个tpoic的服务就能得到通知,然后更新自身配置。

(2)RabbitMQ配置与安装

  • 安装Erlang
  • 安装RabbitMQ
  • 进入RabbitMQ安装目录下sbin目录
  • 输入命名启动管理功能:rabbitmq-pligins enable rabbitmq_management
  • 查看安装插件

(3)实现
有两种实现方式:

  • 通知其中一个客户端,再由该客户端通知其他客户端;

  • 通知一个服务端,而刷新所有客户端配置;

以上两种方式选择第二种,原因如下:

  • 破坏各客户端之前平衡性,增加该客户端压力

以下代码实现在上一节消息配置基础上完成。

1.3.1 服务端配置

第一步:服务端增加消息总线依赖
pom.xml

  <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId></dependency>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>cloud2022</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>cloud-config</groupId><artifactId>cloud-config</artifactId><dependencies><dependency><groupId>com.commons</groupId><artifactId>commons</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency></dependencies></project>

第二步:配置RabbitMQ与Bus刷新端点
application.yml

#   配置rabbitMqrabbitmq:host: localhostport: 5672username: guestpassword: guest#暴露bus刷新端点
management:endpoints:web:exposure:include: "bus-refresh"
server:port: 3344eureka:client:register-with-eureka: true #是否要注册fetchRegistry: true #是否抓取注册信息service-url:defaultZone: http://eureka7001:7001/eureka #,http://eureka7002:7002/eurekainstance: #修改主机名instance-id: config3344prefer-ip-address: true #访问路径显示IPspring:application:name : configcloud:config:server:git:
#          uri: git@github.com:wozaixianaichilamian/springboot_config.git #仓库路径search-paths: -springboot_config #仓库名称uri: https://gitee.com/wozaixianaichilamian/springboot_configlabel: master #分支名称datasource:url: jdbc:mysql://localhost:3306/springboot-mybatisplus?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8username: rootpassword: 123456driver-class-name=com: mysql.cj.jdbc.Driver#   配置rabbitMqrabbitmq:host: localhostport: 5672username: guestpassword: guest#暴露bus刷新端点
management:endpoints:web:exposure:include: "bus-refresh"

1.3.2 客户端端配置

第一步:pom.xml添加依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>cloud2022</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>config-cilent</groupId><artifactId>config-cilent</artifactId><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId><version>2.2.0.RELEASE</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-netflix-eureka-client</artifactId></dependency></dependencies></project>

第二步:配置RabbitMQ,无需配置刷新

#   配置rabbitMqrabbitmq:host: localhostport: 5672username: guestpassword: guestmanagement:endpoints:web:exposure:include: "*"
server:port: 3355eureka:client:register-with-eureka: true #是否要注册fetchRegistry: true #是否抓取注册信息service-url:defaultZone: http://eureka7001:7001/eureka #,http://eureka7002:7002/eurekainstance: #修改主机名instance-id: config3355prefer-ip-address: true #访问路径显示IPspring:application:name : config-clientcloud:config:label: master #分支名称name: config #配置文件地址profile: dev #读取后缀名称uri: http://localhost:3344 #配置中心地址# 以上组合:http://config3344:3344/mastre/config-devdatasource:url: jdbc:mysql://localhost:3306/springboot-mybatisplus?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8username: rootpassword: 123456driver-class-name=com: mysql.cj.jdbc.Driver#   配置rabbitMqrabbitmq:host: localhostport: 5672username: guestpassword: guestmanagement:endpoints:web:exposure:include: "*"

第三步:启动消息服务端与客户端

第四步:修改gitu配置

第五步:cmd使用post刷新服务端

第七步:访问客户端与服务端:刷新服务端同时客户端也进行了刷新
第八步:登录RabbitMQ:可以看到ConfigClient实例监听MQ中同一个topic。(SpringCloudBus)
(4)动态刷新的定点通知

  • 只通知一部分客户端进行刷新,另一部分不刷新。
  • 服务端永远自动刷新

命令公式:

http://localhost:{配置端口号}/actuator/bus-refresh/{需要变更配置的服务或者实例}curl -POST "http://localhost:3344/actuator/bus-refresh/config-cilent:3355"
//config0cilent 为配置文件yml中的application.name,3355为服务端口号

(5)总结

SpringCloud07_消息总线(Bus)相关推荐

  1. SpringCloud教程-消息总线Bus 客户端(client)刷新(SpringCloud版本Greenwich.SR4)

    文章目录 消息总线(Bus)介绍 项目示例 config-client-bus 代码地址:github-spring-cloud地址 前言:前面文章讲了Spring Cloud Config配置中心如 ...

  2. SpringCloud config 配置中心集群配置以及整合消息总线BUS实现关联微服务配置自动刷新

    一.SpringCloud Config 基本配置中的问题 在上一章节<SpringCloud config 配置中心介绍与基本配置使用>中我们现实了配置中心的配置集中管理.调用微服务应用 ...

  3. java技术--SpringCloud:消息总线Bus简介及代码实现(18)

    1.消息总线Bus简介 (1)消息总线Bus的作用<1>在没有使用消息总线的时候,如果需要修改某个配置1.1.如果涉及修改的微服务节点比较多,需要手动的逐个节点的刷新非常麻烦1.2.在微服 ...

  4. 499、Java分布式和集群12 -【SpringCloud视图微服务 - 消息总线Bus】 2021.06.01

    目录 0.RabbitMQ 1.先运行,看到效果,再学习 2.pom.xml 3.bootstrap.yml 4.application.yml 5.ProductDataServiceApplica ...

  5. iframe的src动态修改并刷新_微服务中配置中心Config+消息总线Bus,实现分布式自动刷新配置

    技术/杨33 一.分布式配置中心Config 一套集中的.动态的配置管理,实现统一配置微服务中的每个子服务. Spring Cloud Config为微服务架构提供了集中化的外部配置支持,配置服务器为 ...

  6. SpringCloud教程-消息总线Bus 服务端(server)刷新(SpringCloud版本Greenwich.SR4)

    文章目录 项目示例 config-server-bug 代码地址:github-spring-cloud地址 前言:本篇文章在上一篇文章基础上进行修改,因为虽然我们做到了利用一个消息总线触发刷新,而刷 ...

  7. SpringCloud消息总线——Bus

    Bus 本专栏学习内容来自尚硅谷周阳老师的视频 有兴趣的小伙伴可以点击视频地址观看 在SpringCloud Config学习过程中,还遗留下来一个问题:当运维更新git上的配置信息时,要想更改所有的 ...

  8. SpringCloud微服务架构,Config 分布式配置中心,Bus 消息总线, Stream 消息驱动,Sleuth+Zipkin 链路追踪

    Config分布式配置中心 Config 概述 概述 • Spring Cloud Config 解决了在分布式场景下多环境配置文件的管理和维护. • 好处: • 集中管理配置文件 • 不同环境不同配 ...

  9. 微服务-消息总线 SpringCloud Bus

    1. why 上篇中的配置中心服务端可以实现从远程仓库拉取实时变更的配置, 但是客户端无法直接实现配置更新, 需要向客户端发送一个post请求刷新配置(/actuator/refresh), 客户端微 ...

最新文章

  1. 20170803 - 今日技能封装 - Q
  2. [转载]windows phone 墓碑化(9)
  3. 使用Python内置的smtplib包和email包来实现邮件的构造和发送
  4. 初学web开发需要掌握哪些方面?
  5. 机器学习之决策树的原理及sklearn实现
  6. Vs快捷键设置(可搭配Vim使用)
  7. linux shell 脚本 父子进程 等待子进程,SHELL父子进程分析
  8. 泰山行宫碧霞元君祠_临清市泰山行宫碧霞元君祠5月4号(农历三月三十日)举行大型泰山奶奶接驾法会...
  9. UserCF、 KNN 和 TopK
  10. arcgis 快速制图插件_AutoCAD操作+视频教程+辅助工具和插件,限时分享无套路
  11. IT项目管理学习笔记(一)——第8-11章
  12. linux网络使用情况分析工具
  13. opencv(c++)几何变换------图像平移、旋转、缩放、翻转、剪贴
  14. win10如何更改计算机的用户名称,win10账户名修改,详细教您win10怎么更改账户名称...
  15. 第13节 IIS之WEB服务器部署及网站发布——以win2003为例
  16. Azure SQL 数据库连接字符串
  17. 中文版Eclipse变英文版
  18. 符合SEO标准的div+css页面参考
  19. linux安装mysql-8.0.26
  20. 「群组」和「聊天室」有什么区别?

热门文章

  1. 吕鑫MFC学习系列六
  2. 量子通信 - BB84协议
  3. DZ论坛附件大小限制问题
  4. RiskCloud双控平台(有效分享HAZOP软件篇)
  5. MATLAB频域图像处理
  6. PHP (TP5)常用内容
  7. 汇编实现一位数加减乘除
  8. 产品材料声学性能质检及其测试方法
  9. 关于计算机策划招聘,计算机协会招新策划
  10. android pdfview 显示目录,Android 查看pdf文档——PDFView