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-client org.springframework.cloud spring-cloud-config-server org.springframework.cloud spring-cloud-starter-bootstrap 3.0.2 org.springframework.cloud spring-cloud-starter-bus-amqp org.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-client org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-config 3.0.4 org.springframework.cloud spring-cloud-starter-bootstrap 3.0.2 org.springframework.boot spring-boot-starter-actuator org.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
SpringCloud|SpringCloud 2020.0.4 系列之 Bus
文章图片



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
文章图片


【SpringCloud|SpringCloud 2020.0.4 系列之 Bus】
5. 综述
今天聊了一下 SpringCloud 的 Bus 组件,希望可以对大家的工作有所帮助。
欢迎帮忙点赞、评论、转发、加关注 :)
关注追风人聊Java,每天更新Java干货。

6. 个人公众号
追风人聊Java,欢迎大家关注
SpringCloud|SpringCloud 2020.0.4 系列之 Bus
文章图片


    推荐阅读