Spring Cloud Bus實現自動更新配置
阿新 • • 發佈:2018-11-21
一、概述
1. 配置環境
版本:Spring Boot版本2.0.3.RELEASE,Spring Cloud版本Finchley.SR1,RabbitMQ 3.7.7
說明:本文章是在https://www.cnblogs.com/wslook/p/9994251.html的基礎上完成,
2. 實現原理(如下圖所示)
- 通過訊息佇列MQ傳遞訊息
- 修改配置,對外暴露/actuator/bus-refresh介面
- 手動訪問/actuator/bus-refresh重新整理配置;或者在git伺服器(碼雲、GitHub等)上配置WebHooks,實現自動呼叫/actuator/bus-refresh介面,從而重新整理配置(推薦)
二、Config Server端配置
1. 新增依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency>
2. 修改配置
spring: # Rabbitmq配置 rabbitmq: cache: channel: checkout-timeout: 1s host:192.168.2.246 port: 5672 username: admin password: admin #暴露/actuator/bus-refresh介面 management: endpoints: web: exposure: include: "*"
3. 啟動Config-Server,檢視MQ,會多出來一個佇列
三、Config Client端配置
1. 新增依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency>
2. 新增RabbitMQ配置
spring: # Rabbitmq配置 rabbitmq: cache: channel: checkout-timeout: 1s host: 192.168.2.246 port: 5672 username: admin password: admin
3. 在使用屬性的地方,增加@RefreshScope註解,防止重新整理後配置不生效----------但測試發現,不新增@RefreshScope註解也能動態重新整理配置
//@RefreshScope @Configuration @ConfigurationProperties("aliyun") public class OSSProperties { /** * 內網連線地址 */ private String endpoint; /** * 外網連線地址 */ private String outsideEndpoint; private String accessKeyId; private String accessKeySecret; private String bucketName; /** * 外網訪問地址 */ private String url; private String roleArnPro; ...get set... }
四、測試(這裡使用手動重新整理的方式)
1. 啟動Client端服務,使用postman請求測試介面
2. 修改git伺服器上的配置
3. 呼叫Config Server的/actuator/bus-refresh介面
Config Server控制檯日誌:
Config Client控制檯日誌:
RabbitMQ管理頁面:
4. 重新請求測試介面,發現在沒重啟的情況下,配置已經改變