上一篇中我們實現服務不需重啓即可獲取到遠程倉庫配置文件的最新信息,但是依然存在兩個問題:
- 微服務數量多,每個微服務都做一次加載請求對於開發者而言仍然是一個不小的工作量
- 分佈式系統的理念中微服務只專注於處理自身的業務其他的瑣碎業務並不關心,而此時我們需要每個服務都做加載操作從某種程度上違法了微服務的單一性原則
希望實現的模式:
- 一次請求所有微服務都實現熱部署
- 一個服務去請求各個微服務仍然只關心自身的業務需求
具體實現:
通過加入rabbitmq實現此功能
1、添加maven依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
2、添加yml
spring:
rabbitmq:
host: 127.0.0.1
username:
password:
port: 5672
virtual-host: /adminPy
3、configServer執行請求
http://localhost:8100/actuator/bus-refresh Post請求
PS:上述配置configServer和configClient都要添加。
此時我們將加載的操作交由configServer來操作這樣微服務就不用再做加載請求只專注於自身的業務即可。
簡示圖:
PS:根據git自身的回調機制Webhooks我們還可以實現遠程倉庫更新文件後自動觸發微服務進行熱部署,但是這樣做對項目來說風險較大,萬一上傳的文件有問題服務自動加載會出現無法預估的問題(19年某知名大廠雲服務有次出問題據說就是因爲開發人員改錯了某個配置文件),所以還是建議人爲控制配置文件的加載以此降低項目運行時可能存在的風險。