Spring Cloud Bus将轻量级消息代理程序链接到分布式系统的节点。然后可以使用此代理来广播状态更改(例如配置更改)或其他管理指令。一个关键思想是,总线就像是横向扩展的Spring Boot应用程序的分布式执行器。但是,它也可以用作应用之间的通信渠道。
本文以动态加载配置文件为例
本文使用rabbitmq,安装自行搜索引擎
-
以config-client项目为基础
-
添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
</dependencies>
- 修改application.yml
server:
port: 8880
spring:
application:
name: config-client
rabbitmq:
host: 192.168.211.128
port: 5672
username: guest
password: guest
cloud:
bus:
trace:
#开启消息跟踪
enabled: true
management:
endpoints:
web:
exposure:
#将/actuator/bus-refresh端点开放
include: bus-refresh
eureka:
client:
#是否将自己注册到Eureka服务中
register-with-eureka: true
#是否从Eureka服务中获取注册信息
fetch-registry: true
#Eureka注册中心的地址,多个注册中心用,隔开
serviceUrl:
defaultZone: http://localhost:8761/eureka/
- 修改测试类
@RestController
//在使用配置属性的类上添加,不添加无法刷新属性
@RefreshScope
public class TestCtrl {
@Value("${user.username}")
private String username;
@GetMapping("getUsername")
public String getUsername(){
return username;
}
}
- 测试
依次启动eureka-server,config-server服务,在启动两个端口为8880,8881的当前服务
-
浏览器访问http://localhost:8880/getUsername或者http://localhost:8881/getUsername
admin
-
修改hello-dev.yml中user.username=admin-dev并提交
-
再次访问http://localhost:8880/getUsername或者http://localhost:8881/getUsername
admin
-
post请求http://localhost:8880/actuator/bus-refresh或者http://localhost:8881/actuator/bus-refresh
-
再次访问http://localhost:8880/getUsername或者http://localhost:8881/getUsername
admin-dev
可以将以上配置修改到config-server中,刷新配置时访问config-server,全部客户端都获取到最新的配置
作者公众号