SpringCloud Bus集成了市面上常用的消息中间件(rabbit mq,kafka等),连接微服务系统中的所有的节点,当有数据变更的时候,可以通过消息代理广播通知微服务及时变更数据,例如微服务的配置更新。
SpringCloud Bus 解决了什么问题 ?
Bus组件的作用,当我们把配置文件保存在Git当中,由Git进行管理,一旦配置字段的值进行改变
不需要采用服务器重启的方式去更新配置。
解决了微服务数据变更,及时同步的问题。
刷新客户端服务

刷新服务端服务

配置服务端
(1) 修改cloud_config工程的pom.xml,引用依赖
<!-- 消息 总线 依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-bus</artifactId></dependency><!-- 整合 Rabbitmq 的依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-stream-binder-rabbit</artifactId></dependency>
(2)修改application.yml ,添加配置
rabbitmq:
host: 127.0.0.1
management:
endpoints:
web:
exposure:
include: bus-refresh #开放出去的端口
配置客户端
(1 ) 我们还是以(Provider)生产者模块为例,加入消息总线
<!-- 消息 总线 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus</artifactId>
</dependency>
<!-- 整合 Rabbitmq 的依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
在客户端也加上
rabbitmq:
host: 127.0.0.1
management:
endpoints:
web:
exposure:
include: bus-refresh #开放出去的端口
(3)启动cloud_config 、cloud_provider和cloud_eureka 看是否正常运行
(4) 我们改完之后 码云地址之后,再次发出请求,看看
结果 肯定还是之前一样 ,
postman测试
Url: http://127.0.0.1:9100/actuator/bus-refresh
Method: post
会发现 不需要重启服务器
自定义配置的读取
(1)修改码云上的配置文件,增加自定义配置
bilibili:
ip: 127.0.0.1
(2)在cloud_provider工程中新建controller
@RestController
@RefreshScope
public class TestController {
@Value("${sms.ip}")
private String ip;
@RequestMapping(value = "/ip", method = RequestMethod.GET)
public String ip() {
return ip;
}
}
新增注解 @RestController
(5)通过postman测试
Url: http://127.0.0.1:9100/actuator/bus-refresh
Method: post
