SpringCloud Bus集成了市面上常用的消息中间件(rabbit mq,kafka等),连接微服务系统中的所有的节点,当有数据变更的时候,可以通过消息代理广播通知微服务及时变更数据,例如微服务的配置更新。

SpringCloud Bus 解决了什么问题 ?

Bus组件的作用,当我们把配置文件保存在Git当中,由Git进行管理,一旦配置字段的值进行改变
不需要采用服务器重启的方式去更新配置。
解决了微服务数据变更,及时同步的问题。
刷新客户端服务

09 . 消息总线 SpringCloudBus - 图1

刷新服务端服务

09 . 消息总线 SpringCloudBus - 图2

配置服务端

(1) 修改cloud_config工程的pom.xml,引用依赖

  1. <!-- 消息 总线 依赖 -->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-bus</artifactId>
  5. </dependency>
  6. <!-- 整合 Rabbitmq 的依赖 -->
  7. <dependency>
  8. <groupId>org.springframework.cloud</groupId>
  9. <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
  10. </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