
SpringCloud之消息总线(Spring Cloud Bus)刷新配置
发布日期:2021-05-06 15:33:32
浏览次数:10
分类:技术文章
本文共 6596 字,大约阅读时间需要 21 分钟。
一:简介
- Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间的通讯, 也可以用于监控。本文要讲述的是用Spring Cloud Bus实现通知微服务架构的配置文件的更改。Spring Cloud Bus可选 的消息代理组件包括RabbitMQ,AMQP和Kafka等。
- 为什么需要使用Spring Cloud Bus去刷新配置? 比如,我们现在有几十个微服务,而每个微服务又是多实例,当更改配置时,就需要重启多个微服务实例, 会非常麻烦。Spring Cloud Bus的一个功能就是让这个过程变得简单,当远程Git仓库的配置更改后,只需要向 其中的一个微服务实例发送一个Post请求,通过消息组件通知其它微服务实例重新拉去配置文件即可。
- 整体刷新配置的架构图
- 架构图的简单分析 ⑴Eureka-Server服务 这个服务主要是用来服务的注册和发现的,它是一个注册中心,我们会将Config Server,Config Client这些服务都注册进 去。 ⑵ Config Server服务 这个是一个分布式配置中心Config Server,通过它我们可以从远处Git仓库读取我们需要的配置文件,所以,Config Client 服务可以通过连接它来获取自己需要的配置信息。 ⑶ Config Client服务 这个服务是Config客户端,它需要从Config服务端获取自己的配置文件信息。 ⑷ 消息总线 可以理解为一个消息代理,它可以将分布式的节点都连接起来,也可以完成各个应用程序节点间的相互通信, 这里我们主要用来广播配置文件的更改,并且消息总线的可选消息代理组件包括RabbitMQ,AMQP和Kafka等,这 里我们选中的是RabbitMQ组件。 ⑸/bus/refresh 这个是用来刷新配置的请求,当远程仓库的配置文件修改后,我们不需要重新启动各个子节点,只需向某一个 子节点发送一个Post请求即可,消息总线会自动通知其它各个节点进行配置文件的刷新。
二:实战例子
- 搭建RabbitMQ服务,具体过程需要自行百度,网上教程很多 ,效果如下:
注意:RabbitMQ默认网页端口15672,AMQP默认端口5672(我们链接时用这个)
- 主工程parent
pom.xml配置文件
4.0.0 com.kgf parent 0.0.1-SNAPSHOT pom parent org.springframework.boot spring-boot-starter-parent 2.0.3.RELEASE UTF-8 UTF-8 1.8 Finchley.RELEASE org.springframework.cloud spring-cloud-dependencies ${spring-cloud.version} pom import springcloud-config-server springcloud-config-client springcloud-eureka-server - 创建服务注册和发现中心springcloud-eureka-server服务
⑴创建启动类SpringCloudEurekaServerApplication.java
⑵创建配置文件application.yml文件
⑶在pom.xml文件中添加依赖
4.0.0 com.kgf parent 0.0.1-SNAPSHOT springcloud-eureka-server org.springframework.cloud spring-cloud-starter-netflix-eureka-server org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-maven-plugin - 创建分布式配置中心springcloud-config-server服务,用来为springcloud-config-client提供配置文件信息
⑴创建服务启动类SpringCloudConfigServer.java
⑵创建配置文件application.yml文件(当然这里我们只需要启动一个服务实例即可,这里我们选中的是8888)
---server: port: 8888spring: cloud: config: server: git: uri: https://github.com/kangf897570/SpringcloudConfig search-paths: - respo1 username: kangf897570 password: Kangf@897570 label: master application: name: config-server profiles: dev eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ ---server: port: 9999spring: cloud: config: server: git: uri: https://github.com/kangf897570/SpringcloudConfig search-paths: - respo2 username: kangf897570 password: Kangf@897570 label: master application: name: config-server profiles: test eureka: client: service-url: defaultZone: http://localhost:8761/eureka/
⑶在pom.xml中添加依赖4.0.0 com.kgf parent 0.0.1-SNAPSHOT springcloud-config-server org.springframework.cloud spring-cloud-config-server org.springframework.cloud spring-cloud-starter-netflix-eureka-client org.springframework.boot spring-boot-maven-plugin - 创建分布式配置中心客户端springcloud-config-client服务
⑴创建启动类SpringCloudConfigClientApplication.java
⑵创建配置文件bootstrap.yml
---server: port: 8762spring: application: name: config-client profiles: dev cloud: config: name: config-client-dev #表示要获取的配置文件名称 fail-fast: true discovery: enabled: true service-id: config-server #服务名称,表示从这个服务获取配置信息---server: port: 8763spring: application: name: config-client profiles: test cloud: config: name: config-client-dev fail-fast: true discovery: enabled: true service-id: config-server
⑶在pom.xml中添加依赖4.0.0 com.kgf parent 0.0.1-SNAPSHOT springcloud-config-client org.springframework.cloud spring-cloud-starter-config org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.springframework.cloud spring-cloud-starter-netflix-eureka-client org.springframework.cloud spring-cloud-starter-bus-amqp org.springframework.boot spring-boot-starter-actuator - 查看从GitHub上要获取的配置信息
- 测试,按顺序启动springcloud-eureka-server,springcloud-config-server(启动一个8888端口实例即可), springcloud-config-client服务(两个实例8762和8763),当然MQ要启动。 效果如下:
首先分别访问8762和8763服务:
那么下面我们修改一下GitHub上的配置文件信息:
再次请求8762,8763页面发现和上面一下,数据并没有变化。
下面我们使用springcloud bus消息总线访问一下8762服务,刷新一下配置信息(使用Postman发送post请求)。 路径: 下面再次刷新8762,8763页面,效果如下:
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年03月27日 18时34分33秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
腾讯终于要杀入电商直播了
2019-03-03
花1亿扶持优质红人,如涵推动网红经济出圈之路有何深意?
2019-03-03
AMD、Intel、NVIDIA芯片三巨头内战
2019-03-03
开门红财报下,贝壳找房的春天依然有点冷
2019-03-03
虾米逝去:透视在线音乐的下一场战争
2019-03-03
抢滩抖音、B站,快手港股IPO进程加速
2019-03-03
智能穿戴的结局依然充满悬念
2019-03-03
Linux中的虚拟内存机制和内存映射
2019-03-03
Android系统启动系列5 SystemServer进程下
2019-03-03
Android四大组件系列9 ContentProvider原理
2019-03-03
理解PendingIntent
2019-03-03
Android SurfaceFlinger4 提交Buffer
2019-03-03
深入理解 ClientLifecycleManager 机制
2019-03-03
android基础知识回顾--ContentProvider简单用法
2019-03-03
压缩解压
2019-03-03
js try{}catch(){}finally{}语句
2019-03-03
ES6 块级绑定(二)
2019-03-03
ES6 函数模块(四)
2019-03-03
基于遗传算法(deap)的配词问题与deap框架
2019-03-03
JavaScript入门
2019-03-03