返回

让 Spring Cloud Bus 无缝刷新配置,让应用焕发新生

Android

引言

在微服务架构中,配置管理是一项至关重要的任务。为了保证应用的稳定运行,我们需要对配置进行动态更新,避免因配置变更导致应用中断或故障。Spring Cloud Bus 应运而生,它提供了自动配置刷新功能,无需手动重启应用即可更新配置。

Spring Cloud Bus 原理

Spring Cloud Bus 基于事件总线机制。当配置发生变更时,配置中心会发布一个事件到事件总线,然后所有订阅了该事件的客户端都会收到通知并自动刷新配置。这样一来,应用可以实时获取最新的配置,而无需任何人工干预。

使用 Spring Cloud Bus 自动刷新配置

Spring Cloud Bus 的使用非常简单,只需要在项目中引入必要的依赖即可。

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

注意:

  1. spring-cloud-starter-bus-amqp 是 Spring Cloud Bus AMQP 适配器,它使用 AMQP 协议作为事件总线。
  2. 如果需要使用其他事件总线协议,需要引入相应的适配器依赖。

配置 Spring Cloud Bus

在 application.yml 中配置 Spring Cloud Bus:

spring:
  cloud:
    bus:
      enabled: true
      refresh:
        enabled: true

监听配置变更事件

在应用中监听配置变更事件:

@EventListener(RefreshScopeRefreshedEvent.class)
public void onRefreshScopeRefreshedEvent(RefreshScopeRefreshedEvent event) {
    // 刷新配置
}

演示

为了演示 Spring Cloud Bus 自动刷新配置,我们创建一个简单的 Spring Boot 应用。

pom.xml

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

application.yml

spring:
  cloud:
    bus:
      enabled: true
      refresh:
        enabled: true

MyController.java

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    @Value("${message}")
    private String message;

    @GetMapping("/message")
    public String getMessage() {
        return message;
    }
}

运行应用

启动应用后,访问 /message 接口,会看到默认配置的值。

{
  "message": "Hello World"
}

更新配置

修改配置中心中的配置,将 message 的值改为 Hello Spring Cloud Bus

刷新配置

访问 /bus/refresh 接口,触发配置刷新。

再次访问 /message 接口

会看到配置已经更新成功。

{
  "message": "Hello Spring Cloud Bus"
}

总结

Spring Cloud Bus 是一个强大的工具,可以帮助我们实现配置的动态更新。通过使用 Spring Cloud Bus,我们可以避免手动重启应用,确保应用的高可用性。在云原生时代,Spring Cloud Bus 是构建弹性、可扩展微服务架构的必备组件。