什么是总线

在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个公用的消息主题,并让系统中所有微服务实例都连接上来,由于该主题中产生的消息会被所有实例监听和消费,所以称之为消息总线,在总线上的各个实例,都可以方便的广播一些需要让其他连接在该主题的实例都知道的消息

基本原理

configClient 实例都监听MQ中同一个topic(默认是springcloudBus)。当一个服务刷新数据的时候,他会把这个信息放入到Topic中,这样其他监听同一个topic的服务就能得到通知,然后去更新自身配置

配置rabbitMQ环境

此处略过。

引入消息总线,实现动态刷新配置

1. 修改服务端配置

依赖引入。

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-bus-amqp</artifactId>
  4. </dependency>

修改application.yml。

# rabbitmq相关配置 15672是web管理界面的端口:5672是mq访问的端口
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest


# rabbitmq相关配置,暴露bus刷新配置的端点
management:
  endpoints:
    web:
      exposure:
        include: 'bus-refresh'

2. 修改客户端配置

依赖引入。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

修改bootstrape.yml。

# rabbitmq相关配置 15672是web管理界面的端口:5672是mq访问的端口
rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka
management:
  endpoints:
    web:
      exposure:
        include: "*"

启动服务,这时候,只要刷新配置中心的服务,那么就会广播到所有的客户端服务。

curl -X POST "http://localhost:3355/actuator/bus-refresh"

BUS定点通知

格式:http://localhost:配置中心端口号/actuator/bus-refresh/{destination}

curl -X POST "http://localhost:3355/actuator/bus-refresh/config-client:3355"