本文主要是介绍SpringCloud 2020.0.4 系列之 Bus,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
1. 概述
2. Git 准备
3. Config Server 引入 Bus 组件
4. Config Client 引入 Bus 组件
5. 综述
6. 个人公众号
1. 概述
老话说的好:会休息的人才更会工作,身体是革命的本钱,身体垮了,就无法再工作了。
言归正传,之前我们聊了 SpringCloud 的 分布式配置中心 Config,文章里我们聊了config配置的动态刷新,但这个动态刷新,一次只能刷新一个 Config Client 节点,如果服务节点少还好,如果业务多了,有成百上千个服务节点,再一台一台刷新,就不合适了。
因此,今天我们来聊聊 SpringCloud的消息总线组件 Bus,Bus 组件可以借助MQ中间件,向所有的 Config Client 发送刷新广播,只需要调用一个接口,就可以刷新整个集群的Config 配置。
我们使用 RabbitMQ 作为中间件,关于 RabbitMQ 集群的搭建,可参见我的另一篇文章《RabbitMQ 3.9.7 镜像模式集群的搭建》(RabbitMQ 3.9.7 镜像模式集群的搭建_追风人的博客-CSDN博客)。
闲话不多说,直接上代码。
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 主要依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</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-bootstrap</artifactId><version>3.0.2</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
3.2 application.yml 配置
server:port: 42000spring:application:name: my-bus-serverrabbitmq:addresses: 192.168.1.22:5672,192.168.1.12:5672,192.168.1.11:5672 # rabbitmq 集群的地址username: guestpassword: guestvirtual-host: /connection-timeout: 16000cloud: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 主要依赖
<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.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId><version>3.0.4</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId><version>3.0.2</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- rabbitmq --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId></dependency>
4.2 bootstrap.yml 配置
server:port: 43000spring:application:name: my-bus-clientrabbitmq:addresses: 192.168.1.22:5672,192.168.1.12:5672,192.168.1.11:5672username: guestpassword: guestvirtual-host: /connection-timeout: 16000cloud:config:profile: dev # 拉取的配置文件label: main # 拉取的分支name: my-bus-client # 指定远程获取配置文件的 application,默认会取 spring.application.namediscovery:enabled: trueservice-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 + "<br>";info += "name:" + name + "<br>";info += "desc:" + desc + "<br>";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
5. 综述
今天聊了一下 SpringCloud 的 Bus 组件,希望可以对大家的工作有所帮助。
欢迎帮忙点赞、评论、转发、加关注 :)
关注追风人聊Java,每天更新Java干货。
6. 个人公众号
追风人聊Java,欢迎大家关注
这篇关于SpringCloud 2020.0.4 系列之 Bus的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!