SpringCloud|SpringCloud 2020.0.4 系列之 Bus
1. 概述
老话说的好:会休息的人才更会工作,身体是革命的本钱,身体垮了,就无法再工作了。
言归正传,之前我们聊了 SpringCloud 的 分布式配置中心 Config,文章里我们聊了config配置的动态刷新,但这个动态刷新,一次只能刷新一个 Config Client 节点,如果服务节点少还好,如果业务多了,有成百上千个服务节点,再一台一台刷新,就不合适了。
因此,今天我们来聊聊 SpringCloud的消息总线组件 Bus,Bus 组件可以借助MQ中间件,向所有的 Config Client 发送刷新广播,只需要调用一个接口,就可以刷新整个集群的Config 配置。
我们使用 RabbitMQ 作为中间件,关于 RabbitMQ 集群的搭建,可参见我的另一篇文章《RabbitMQ 3.9.7 镜像模式集群的搭建》(https://www.cnblogs.com/w84422/p/15356202.html)。
闲话不多说,直接上代码。
2. Git 准备
1)创建一个 repository,用于放置配置文件,例如:my-config-repo
2)创建 my-bus-client 文件夹
3)在 my-bus-client 文件夹下,新建 my-bus-client-dev.yml 配置文件,内容如下:
info: profile: devname: zhuifengren desc: hello dev
3. Config Server 引入 Bus 组件
3.1 主要依赖
org.springframework.cloud spring-cloud-starter-netflix-eureka-clientorg.springframework.cloud spring-cloud-config-serverorg.springframework.cloud spring-cloud-starter-bootstrap3.0.2 org.springframework.cloud spring-cloud-starter-bus-amqporg.springframework.boot spring-boot-starter-actuator
3.2 application.yml 配置
server: port: 42000spring: application: name: my-bus-server rabbitmq: addresses: 192.168.1.22:5672,192.168.1.12:5672,192.168.1.11:5672# rabbitmq 集群的地址 username: guest password: guest virtual-host: / connection-timeout: 16000 cloud: config: server: git: uri: https://github.com/w84422/my-config-repo.git# git地址 force-pull: true# 强制拉取资源文件 default-label: main# 默认拉取的分支 search-paths: '{application}'# 将配置文件放到接入方服务名称对应的文件夹下,这种写法,只在config组件设置生效management: endpoints: web: exposure: include: '*' endpoint: health: show-details: alwayseureka: client: service-url: defaultZone: http://zhuifengren1:35000/eureka/,http://zhuifengren2:35001/eureka/# Eureka Server的地址
3.3 启动类增加注解
@SpringBootApplication @EnableConfigServer @EnableDiscoveryClient public class MyBusServerApplication {public static void main(String[] args) { SpringApplication.run(MyBusServerApplication.class, args); } }
3.4 启动 Config Server
启动 Config Server
4. Config Client 引入 Bus 组件
4.1 主要依赖
org.springframework.cloud spring-cloud-starter-netflix-eureka-clientorg.springframework.boot spring-boot-starter-weborg.springframework.cloud spring-cloud-starter-config3.0.4 org.springframework.cloud spring-cloud-starter-bootstrap3.0.2 org.springframework.boot spring-boot-starter-actuatororg.springframework.cloud spring-cloud-starter-bus-amqp
4.2 bootstrap.yml 配置
server: port: 43000spring: application: name: my-bus-client rabbitmq: addresses: 192.168.1.22:5672,192.168.1.12:5672,192.168.1.11:5672 username: guest password: guest virtual-host: / connection-timeout: 16000 cloud: config: profile: dev# 拉取的配置文件 label: main# 拉取的分支 name: my-bus-client# 指定远程获取配置文件的 application,默认会取 spring.application.name discovery: enabled: true service-id: my-bus-server# config服务的服务名称myDesc: ${desc}eureka: client: service-url: defaultZone: http://zhuifengren1:35000/eureka/,http://zhuifengren2:35001/eureka/# Eureka Server的地址management: endpoints: web: exposure: include: '*' endpoint: health: show-details: always
4.3 启动类增加注解
@SpringBootApplication @EnableDiscoveryClient public class MyBusClientApplication {public static void main(String[] args) { SpringApplication.run(MyBusClientApplication.class, args); } }
4.4 增加用于实验的 Controller 类
@RefreshScope @RestController public class MyBusClientRefreshController {@Value("${info.profile}") private String profile; @Value("${name}") private String name; @Value("${myDesc}") private String desc; @RequestMapping("/refresh-info") public String getInfo() {String info = "profile:" + profile + "
"; info += "name:" + name + "
"; info += "desc:" + desc + "
"; return info; } }
4.5 启动 Config Client 服务,并进行验证
4.5.1 启动 Config Client 服务
启动两个或多个 Config Client 服务
4.5.2 访问 Controller 接口,获取配置信息
GET http://localhost:43000/refresh-info
文章图片
4.5.3 修改 Git 上的配置
将 name 改为 zhangsan
4.5.4 执行bus配置刷新接口
在 Config Server 或 任意 Config Client 节点,执行 bus 配置刷新接口
POST http://localhost:42000/actuator/busrefresh
4.5.5 在所有 Config Client 节点调用 Controller 接口,重新获取信息
GET http://localhost:43000/refresh-info
文章图片
【SpringCloud|SpringCloud 2020.0.4 系列之 Bus】
5. 综述
今天聊了一下 SpringCloud 的 Bus 组件,希望可以对大家的工作有所帮助。
欢迎帮忙点赞、评论、转发、加关注 :)
关注追风人聊Java,每天更新Java干货。
6. 个人公众号
追风人聊Java,欢迎大家关注
文章图片
推荐阅读
- 【欢喜是你·三宅系列①】⑶
- 你不可不知的真相系列之科学
- 人脸识别|【人脸识别系列】| 实现自动化妆
- 2018-06-13金句系列7(金句结构-改编古现代诗词)
- Unity和Android通信系列文章2——扩展UnityPlayerActivity
- 乡野村趣系列之烧仙草
- Java内存泄漏分析系列之二(jstack生成的Thread|Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析)
- 15、IDEA学习系列之其他设置(生成javadoc、缓存和索引的清理等)
- 【年终激励系列】之五(年终奖如何与考核紧密相连)
- 剥削劳动力系列(企业家剥削你时,他要付出巨大的代价)