📜  实施Spring Cloud Bus(1)

📅  最后修改于: 2023-12-03 15:09:26.943000             🧑  作者: Mango

实施Spring Cloud Bus

Spring Cloud Bus是一个轻量级的消息总线,可以在应用程序之间传递消息。

功能
  • 在分布式系统中传递消息,实现各个微服务之间的通信
  • 无需使用复杂的REST API,通过消息总线来传递信息
  • 使用AMQP、Kafka或RabbitMQ作为消息代理
  • 自动配置和自动发现
如何实现

Spring Cloud Bus的实现分为三个步骤:

  1. 添加依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
  1. 配置RabbitMQ

在application.yml文件中添加以下配置:

spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
  1. 通过HTTP POST请求触发消息总线

我们需要通过HTTP POST请求来触发消息总线,以向其他微服务广播消息。如下所示:

curl -X POST http://localhost:8080/actuator/bus-refresh
示例

假设我们有两个微服务:config和hello。现在我们需要将config服务中的配置信息传递到hello服务中。

  1. 添加依赖

在config和hello微服务的pom.xml文件中,分别添加以下依赖:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
  1. 配置RabbitMQ

在两个微服务的application.yml文件中,添加以下配置:

spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
  1. 启用Spring Cloud Bus

在config微服务的application.yml文件中,添加以下配置:

spring:
  application:
    name: config
  cloud:
    config:
      server:
        git:
          uri: https://github.com/spring-cloud-samples/config-repo.git
        allowOverride: true   # 允许config-service重载配置
  bus:
    refresh:
      enabled: true   # 启用Spring Cloud Bus刷新配置
    trace:
      enabled: true   # 启用Spring Cloud Bus跟踪信息
  1. 实现Controller类

在config微服务中实现如下的Controller类:

@RestController
@RequestMapping("/config")
public class ConfigController {

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

  @RequestMapping("/hello")
  public String hello() {
    return this.message;
  }

  @PostMapping("/refresh")
  public String refresh() {
    return "Refreshed";
  }

}
  1. 更新配置

在config微服务中的config-repo仓库中,更新application.yml中的message配置。例如,将其修改为:

message: Hello updated
  1. 提交变更并触发消息总线

提交config-repo仓库的变更,并通过HTTP POST请求触发消息总线:

curl -X POST http://localhost:8888/actuator/bus-refresh
  1. 查看结果

在hello微服务中,通过以下URL查看配置是否更新:

http://localhost:8762/hello

如果配置更新成功,将会显示“Hello updated”。

参考