📅  最后修改于: 2023-12-03 15:09:26.943000             🧑  作者: Mango
Spring Cloud Bus是一个轻量级的消息总线,可以在应用程序之间传递消息。
Spring Cloud Bus的实现分为三个步骤:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
在application.yml文件中添加以下配置:
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
我们需要通过HTTP POST请求来触发消息总线,以向其他微服务广播消息。如下所示:
curl -X POST http://localhost:8080/actuator/bus-refresh
假设我们有两个微服务:config和hello。现在我们需要将config服务中的配置信息传递到hello服务中。
在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>
在两个微服务的application.yml文件中,添加以下配置:
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
在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跟踪信息
在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";
}
}
在config微服务中的config-repo仓库中,更新application.yml中的message配置。例如,将其修改为:
message: Hello updated
提交config-repo仓库的变更,并通过HTTP POST请求触发消息总线:
curl -X POST http://localhost:8888/actuator/bus-refresh
在hello微服务中,通过以下URL查看配置是否更新:
http://localhost:8762/hello
如果配置更新成功,将会显示“Hello updated”。