
服務架構
在分布式配置中,客戶端獲取遠程最新配置時(比如:Git),要手動發送POST請求客戶端來刷新.在集群環境下,不是很方便.使用Spring Cloud Bus總線可以自動刷新客戶端配置.
1.服務端配置
pom.xml
<!-- config-server 服務配置中心 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!-- bus 消息總線 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
application.yml
spring:
application:
name: config-bus-server
cloud:
config:
server:
git:
uri: https://github.com/xianghaizing/spring-cloud-learn
search-paths: config-repo
# 以下都是默認配置
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
server:
port: 8888
management:
endpoints:
web:
exposure:
include: bus-refresh # 暴露刷新節點 2.x版本需要手動開啟
2.客戶端配置
pom.xml
<!-- spring mvc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 配置中心client端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!-- bus 消息總線 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
application.yml
spring:
application:
name: config-bus-client
cloud:
config:
uri: http://localhost:8888
name: lyf # 遠程文件的application名字
profile: dev
label: master
bus:
trace:
enabled: true
# 以下都是默認配置
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
server:
port: 8040
name
遠程文件的application名字rabbitmq
RabbitMQ服務地址以及用戶名和密碼
Controller.java
@RefreshScope
@RestController
public class BusClientController {
@Value("${from}")
private String from;
@GetMapping("/from")
public String getFrom(){
return this.from;
}
}
@RefreshScope
必須添加才能自動刷新
3.自動刷新配置
依次啟動:
- 啟動RabbitMQ服務
- 啟動服務端
- 啟動多個客戶端
驗證順序和方式跟之前一樣.只是,現在要向服務端
發送請求,而不是客戶端
!
POST: http://localhost:8888/actuator/bus-refresh
所有客戶端的配置都已經更新.