目录

是什么?

如何使用?

Docker安装RabbitMQ

SpringCloud Bus动态刷新全局广播

SpringCloud Bus动态刷新定点通知

是什么?

SpringCloud Bus是用来将分布式系统的节点与轻量级系统链接起来的一个框架,它整合了Java的事件处理机制和消息中间件的功能,SpringCloud Bus能管理和传播分布式系统间的消息,就像一个分布式执行器,可用于广播状态更改、事件推送等,也可以当作微服务间的通信通道

SpringCloud Bus配合SpringCloud Config使用可以实现配置的动态刷新,Bus支持两种消息代理:RabbitMQ和Kafka

如何使用?

Docker安装RabbitMQ

在Linux的docker里拉取RabbitMQ镜像docker pull rabbitmq:3.8.3-management(management是带web的管理界面)

[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker pull rabbitmq:3.8.3-management
3.8.3-management: Pulling from library/rabbitmq
23884877105a: Pull complete
bc38caa0f5b9: Pull complete
2910811b6c42: Pull complete
36505266dcc6: Pull complete
15c38f93e1dd: Pull complete
3d3f9ad120a1: Pull complete
5b6fe3271410: Pull complete
f19a60139bb3: Pull complete
6473f260fa7d: Pull complete
c6bfc255d245: Pull complete
ab9457e6d377: Pull complete
6b744fa5d23e: Pull complete
Digest: sha256:2895b23e08cd7fa0615d39147c1746908b0cb8064e9fbbf7770619651b501814
Status: Downloaded newer image for rabbitmq:3.8.3-management
docker.io/library/rabbitmq:3.8.3-management

如果报了下面的错误

[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker pull ribbitmq:3.8.3-management
Error response from daemon: pull access denied for ribbitmq, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

注册一个账号,登录即可

运行RibbitMQ,注意:15672是web端访问可视化界面时使用的端口

[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker images
REPOSITORY   TAG                IMAGE ID       CREATED         SIZE
docker-web   latest             83e2b1e93d3d   12 days ago     661MB
tomcat       latest             b0e0b0a92cf9   3 weeks ago     680MB
rabbitmq     3.8.3-management   867da7fcdf92   18 months ago   181MB
redis        5.0.9-alpine3.11   3661c84ee9d0   19 months ago   29.8MB
java         8                  d23bdf5b1b1b   4 years ago     643MB[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker run -d --name ribbitmq-bus -p 5673:5672 -p 15671:15672 867da7fcdf92
514256b561f87a0589a9d6ef4c914977aa3929ac1c3f758e796b957640e09f5f[root@iZbp12fj4dxm8z5uofcvshZ ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                                                                        NAMES
514256b561f8   867da7fcdf92   "docker-entrypoint.s…"   7 seconds ago   Up 6 seconds   4369/tcp, 5671/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:5673->5672/tcp, 0.0.0.0:15671->15672/tcp   ribbitmq-bus
352322c01534   docker-web     "java -jar /app.jar …"   12 days ago     Up 22 hours    0.0.0.0:49160->8080/tcp                                                                      chen-springboot-docker

在浏览器地址栏输入http://10.211.55.17:15671访问RabbitMQ的管理页面,用户名和密码默认guest(如果是远程服务器,需要进安全组开放端口)

SpringCloud Bus动态刷新全局广播

  • 具备良好的RibbitMQ环境
  • 设计思想:利用消息总线触发一个服务端/ConfigServer/bus/refresh,而刷新所有客户端的配置
  • 演示广播效果,增加复杂度,以3355为模板再制作一个3366
  • 给cloud-config-center-3344配置中心服务端添加消息总线支持
  • 给cloud-config-client-3355客户端添加消息总线支持
  • 给cloud-config-client-3366客户端添加消息总线支持
  • 测试
  • 一次修改,广播通知,处处生效

1.按照3355新建3366

2.给cloud-config-center-3344配置中心(服务端)添加消息总线支持

  • pom文件
  <!--添加消息总线RabbitMQ的支持--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId></dependency>
  • yml文件(最终版)
server:port: 3344spring:application:name: cloud-config-center # 注册进Eureka服务器的微服务名cloud:config:server:git:uri: https://github.com/chenstudyJava/springcloud-config.git  # git的仓库地址search-paths:   # 搜索目录- springcloud-configlabel: master   # 读取的分支rabbitmq:host: 112.124.16.82  # 本机写localhost,远程服务器的写服务器地址port: 5673   # 客户端和RabbitMQ进行通信的端口username: guest # 默认也是guestpassword: guest # 默认也是guesteureka:client:service-url:defaultZone: http://localhost:7001/eureka   # 服务注册到的eureka地址# RabbitMQ相关配置
management:endpoints:  # 暴露bus刷新配置的端点web:exposure:include: 'bus-refresh'

3.给cloud-config-client-3355/3366客户端添加消息总线支持

  • pom文件
  <!--添加消息总线RabbitMQ的支持--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId></dependency>
  • yml文件
server:port: 3355spring:application:name: config-clientcloud:# config客户端配置config:# 这三个综合:master分支上的config-dev.yml的配置文件被读取到# http://config-3344.com:3344/master/config-dev.ymllabel: master   # 分支名称name: config    # 配置文件名称profile: dev    # 读取后缀名称uri: http://localhost:3344  # 配置中心地址rabbitmq:host: 112.124.23.82  # 本机写localhost,服务器的写服务器地址port: 5673   # 客户端和RabbitMQ进行通信的端口username: guest # 默认也是guestpassword: guest # 默认也是guesteureka:client:service-url:defaultZone: http://localhost:7001/eureka   # 服务注册到的eureka地址# 暴露监控端点
management:endpoints:web:exposure:include: "*"

4.测试启动7001,3344,3355,3366,一次修改,广播通知,处处生效

这里我在启动3366的时候报错了:错误如下

Failed to execute goal org.apache.maven.plugins:
maven-install-plugin:2.4:install (default-install) on project cloud-config-client-3366:
Failed to install metadata com.IT.springcloud:cloud-config-client-3366:1.0-SNAPSHOT/maven-metadata.xml:
Could not parse metadata D:\.m2\com\IT\springcloud\cloud-config-client-3366\1.0-SNAPSHOT\maven-metadata-local.xml: only whitespace content allowed before start tag and not \u0 (position: START_DOCUMENT seen \u0.无法执行goal org.apache.maven.plugins:maven安装插件:2.4:
install(默认安装)在项目cloud-config-client-3366上:
未能安装元数据com.IT.springcloud:cloud-config-client-3366:1.0-SNAPSHOT/maven-metadata.xml:
无法分析元数据D:\.m2\com\IT\springcloud\cloud-config-client-3366\1.0-SNAPSHOT\maven-metadata-local.xml:
仅允许在开始标记之前使用空格内容,而不允许\u0(位置:开始\u已看到文档\u0

好家伙,我只记得那天电脑突然卡住,然后就重启,各种卡死!!!好吧,还是先把问题解决了,上CSDN搜索了一下,应该是这个maven-metadata-local.xml文件有问题,快刀斩乱麻,删掉!!!(浪费好多时间)然后清理、重新启动项目解决了!嘿嘿!

修改GitHub上的版本号,在终端(cmd命令窗口)输入下面命令发送post请求:

E:\>curl -X POST "http://localhost:3344/actuator/bus-refresh"E:\>

在浏览器地址栏分别输入:localhost:3355/configInfo,localhost:3366/configInfo

serverport:3355 configInfo:master branch,springcloud-config/config-dev.yml version=2serverport:3366 configInfo:master branch,springcloud-config/config-dev.yml version=2

其实吧,收到通知的客户端都同时订阅了一个topic交换机

SpringCloud Bus动态刷新定点通知

  • 指定具体某一个实例生效而不是全部实例都生效
  • 公式:http://localhost:配置中心的端口号/sctuator/bus-refresh/{destination}
  • /bus/refresh请求将不再发送到具体的服务实例上,而是发给config server并通过destination参数来指定需要更新配置的服务或实例

不信来弄个测试:

1.修改Github上的版本号(我改为3)

2.在终端(cmd命令窗口)输入:

E:\>curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3355"E:\>

然后重新浏览器地址栏分别输入:localhost:3355/configInfo,localhost:3366/configInfo

# 返回结果
serverport:3355 configInfo:master branch,springcloud-config/config-dev.yml version=3
serverport:3366 configInfo:master branch,springcloud-config/config-dev.yml version=2

SpringCloud Bus消息总线相关推荐

  1. SpringCloud Config配置中心、SpringCloud Bus消息总线

    一.SpringCloud Config 1.前言 微服务意味着要将单体应用中的业务拆分成一个个子服务, 每个服务的粒度相对较小,因此系统中会出现大量的服务.由于每个服务都需要必要的配置信息才能运行, ...

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

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

  3. SpringCloud(十一)Bus消息总线、Stream消息驱动

    一.Bus消息总线 需求:分布式自动刷新配置功能: 解决:SpringCloud Bus配合Spring cloud Config使用可以实现配置的动态刷新. 1.概述 定义:Spring Cloud ...

  4. 【SpringCloud框架之Bus消息总线】

    本笔记内容为尚硅谷SpringCloud框架开发Bus消息总线部分 目录 一.概述 1.Bus消息总线是什么 2.作用 3.为何被称为总线 二.RabbitMQ环境配置 三.SpringCloud B ...

  5. Bus消息总线如何实现

    我们如果要去更新所有微服务的配置,在不重启的情况下去更新配置,只能依靠spring cloud config了,但是,是我们要一个服务一个服务的发送post请求, 我们能受的了吗?这比之前的没配置中心 ...

  6. 十七、Bus消息总线

    目录 1.Bus消息总线介绍: 2.使用消息总线实现配置自动更新 2.1.方案一架构图: 2.2.方案二架构图(常用) 3.对springcloud-config-server项目进行改造 3.1.修 ...

  7. Spring Cloud(十一)高可用的分布式配置中心 Spring Cloud Bus 消息总线集成(RabbitMQ)

    上一篇文章,留了一个悬念,Config Client 实现配置的实时更新,我们可以使用 /refresh 接口触发,如果所有客户端的配置的更改,都需要手动触发客户端 /refresh ,当服务越来越多 ...

  8. Message Bus - 消息总线

    Message Bus - 消息总线 Liferay的*消息总线(Message Bus)*是一种服务级API,组件可以用它来发送和接收消息.它提供了消息生产者(producers)和消费者(cons ...

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

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

最新文章

  1. TensorRT Samples: MNIST API
  2. springboot解决js前端跨域问题,javascript跨域问题解决
  3. 农大计算机学院姜新华,计算机学院红帽学院揭牌仪式
  4. python编写爬虫的步骤-用Python编写一个简单的爬虫
  5. LRU最近最少使用缓存集合
  6. ==和equals()比较
  7. win10 dcom服务器进程占用cpu,WIN10CPU百分百,Windows10 DCOM占用过高解决办法 | 帮助信息-动天数据...
  8. java中的类、成员变量、方法的修饰符。
  9. 数字信号处理2:傅里叶变换
  10. 计算机加入域无法访问登录,不加入域不能访问域资源
  11. POJ 1815 Friendship 最小割+字典序最小割集
  12. 基于QT实现的图形软件图片编辑器
  13. MCU 8080规格LCD屏显示优化——RGB666
  14. 小米路由器3c 虚拟服务器,小米路由器3C上不了网怎么办?
  15. 09 | 不可或缺的自定义函数
  16. PS中矢量形状图层的合并交叉等运算
  17. java 监控系统cpu,java系统监控CPU 磁盘
  18. oracle sql优化的几条法则
  19. unity全栈开发是什么意思_为什么你应该尝试“全栈”
  20. windows下编程控制摄像头的详细介绍

热门文章

  1. echarts动态滑动平均滤波
  2. IntelliJ IDEA 查找和替换操作
  3. omnipeek安装与抓包
  4. JS获取控制Video
  5. Java 8 辣么大(lambda)表达式不慌之-----(一)Function
  6. Oracle数据库巡检表--服务器、操作系统、存储、数据库
  7. HTML网页制作基础教程
  8. 3D Human Pose Estimation with 2D Marginal Heatmaps
  9. php iframe 自适应高度,两个iframe自适应高度的解决方法
  10. 复旦FM17522芯片读写M1卡(S50/S70)、CPU卡要点摘录