作者:立行谏圣 | 来源:互联网 | 2024-10-16 13:40
说明:关于SpringCloud系列的文章中的代码都在码云上面 地址:https://gitee.com/zh_0209_java/springcloud-alibaba.git
简介 Spring Cloud Bus 配置 Spring Cloud Config 使用可以实现配置的动态刷新。 Spring Cloud Bus 是用来将分布式系统的节点与轻量级消息系统链接起来的框架,他整合了Java的事件处理机制和消息中间件的功能 。
Bus 支持两种消息代理:RabbitMQ
和 Kafka
作用 Spring Cloud Bus 能管理和传播分布式系统间的消息,就像一个分布式执行器,可用于广播状态更改,事件推送等,也可以当做微服务间的通信通道。
为什么被称之为总线?
什么是总线? 在微服务架构的系统中,通常会使用轻量级的消息代理 来构架一个共用的消息主题 ,并让系统中所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称他为消息总线 。 基本原理 ConfigClient 实例都监听MQ中通一个topic(默认是springCloudBus).当一个服务刷新数据的时候,他会把这个消息放入到Topic中,这样其他监听同一个Topic的服务就能得到通知,然后去更新自身的配置。
修改3344服务 新增pom依赖 < dependency> < groupId> org.springframework.cloud groupId> < artifactId> spring-cloud-starter-bus-amqp artifactId> dependency>
修改配置文件 server : port : 3344 spring : application : name : cloud- config- center cloud : config : server : git : uri : https: //gitee.com/zh_0209_java/springcloud- config.git label : master rabbitmq : host : 10.10.11.21port : 5672 username : guestpassword : guesteureka : instance : instance-id : configCenter3344prefer-ip-address : true lease-renewal-interval-in-seconds : 1 lease-expiration-duration-in-seconds : 2 client : register-with-eureka : true fetchRegistry : true service-url : defaultZone : http: //localhost: 7001/eureka management : endpoints : web : exposure : include : &#39;bus-refresh&#39;
修改3355服务 新增pom依赖 < dependency> < groupId> org.springframework.cloud groupId> < artifactId> spring-cloud-starter-bus-amqp artifactId> dependency>
修改配置文件 server : port : 3355 spring : application : name : config- clientcloud : config : label : master name : config profile : dev uri : http: //localhost: 3344 rabbitmq : host : 10.10.11.21port : 5672 username : guestpassword : guesteureka : instance : instance-id : configClient3355prefer-ip-address : true lease-renewal-interval-in-seconds : 1 lease-expiration-duration-in-seconds : 2 client : register-with-eureka : true fetchRegistry : true service-url : defaultZone : http: //localhost: 7001/eureka management : endpoints : web : exposure : include : "*"
启动eureka&#xff0c;3344,3355 进行测试
当修改完远程仓库的配置文件后&#xff0c;向3344发送一个POST请求 curl -X POST "http://localhost:3344/actuator/bus-refresh"
,在访问3355&#xff0c;即可发现自动更新了配置&#xff0c;这样的好处就是&#xff0c;向配置服务端发送一个post请求&#xff0c;可以更新所有客户端的请求。
bus动态刷新定点通知 比如我们现在还有一个客户端3366&#xff0c;当我们更新了配置&#xff0c;想只刷新3355&#xff0c;而不更新3366&#xff0c;这时候就需要定点通知
公式&#xff1a; http://localhost:3344/actuator/bus-refresh/{destination}
通过destination 参数指定需要更新配置的服务或实例&#xff0c;
destination 的取值就是 {spring.application.name} [: {port}]
比如我想只刷新3355&#xff0c;那么就发送这样一个POST请求curl -X POST http://localhost:3344/actuator/bus-refresh/config-client:3355