# 快速搭建微服务-消息总线

利用Spring Cloud Bus提供的批量刷新配置的机制,可以实现在配置中心的配置信息发生变化后自动更新相关服务的配置的功能。Spring Cloud Bus消息总线通过使用轻量级的消息代理中间件(例如RabbitMQ、Kafka等)连接分布式系统的节点,这样就可以通过Spring Cloud Bus广播配置信息的变化。

这里使用RabbitMQ作为消息中间件向Spring Cloud微服务架构中加入消息总线,并实现配置自动刷新配置信息的功能。

# 配置中心服务端

  • 添加Maven依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
1
2
3
4
  • 配置信息
spring:
  cloud:
    bus:
      trace:
        enabled: true
  rabbitmq:
    host: 
    port: 
    username: 
    password: 
1
2
3
4
5
6
7
8
9
10

配置项 spring.cloud.bus.trace.enabled=true 用于开启跟踪总线事件,在 /bus/refresh 端点被请求后,访问 /trace 端点即可获得事件的传播细节。

# 配置中心客户端

  • 添加Maven依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
1
2
3
4
  • 配置信息
spring:
  rabbitmq:
    host: 
    port: 
    username: 
    password: 
1
2
3
4
5
6

# 更改配置后自动刷新

更改配置中心保存的配置信息之后,可以通过 POST 方式手动访问配置中心服务端的 /bus/refresh 接口来刷新相关微服务应用的配置。如果想自动刷新,可以借助Git仓库的WebHook配置push代码之后自动访问 /bus/refresh 端口即可。

需要注意的是,需要在使用 @Value 或者 @Autowired 注解的方式调用配置信息的类上加上 @RefreshScope 注解以响应配置的更新。