【SpringCloud】配置中心config如何實現動態刷新配置文件—bus消息總線

配置中心config如何實現動態刷新配置文件的大概思想,使用了消息隊列rabbitmq,服務器端配置文件改了,向消息隊列發消息,客戶端監聽消息隊列,若有改變,自動更新

一、配置動態刷新的主要步驟

1、服務端引入bus與rabbit(spring-cloud-bus、spring-cloud-stream-binder-rabbit)的依賴
2、服務端暴露觸發消息中心的地址
3、客戶端引入bus、rabbit和actuator(spring-cloud-bus、spring-cloud-stream-binder-rabbit、spring-boot-starter-actuator)的依賴
4、在待刷新的配置屬性所在的類上添加@RefreshScope註解
5、修改配置文件後,嚮應用的/actuator/bus-refresh斷點發送POST請求,即可刷新該屬性

二、配置動態刷新具體實現

1、服務端

我這裏是更改的config-demo

(1)引入依賴

 <dependency>
    <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-bus</artifactId>
 </dependency>
 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
 </dependency>

(2)更改配置文件

添加rabbitmq

spring:
  rabbitmq:
    host: XXX.XXX.XXX.XXX # 安裝rabbitmq的服務器ip
    username: guest
    password: guest
    virtual-host: /

暴露觸發消息中心的地址

management:
  endpoints:
    web:
      exposure:
        include: bus-refresh

2、客戶端

我這裏是更改的producer-demo

(1)引入依賴

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-bus</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

(2)在要動態獲取參數的類上添加註解@RefreshScope

使用@Value讀取配置文件的參數
在這裏插入圖片描述

(3)測試

我用postman測試一個接口http://127.0.0.1:8081/user/3,可以看到控制檯打印出了自己配置的ip,如下圖所示:
在這裏插入圖片描述
我的配置文件如下:
在這裏插入圖片描述
現在要實現的效果就是,我更改了producer-dev.yml這個配置文件,項目不用重啓,就可以獲取到新的配置
現在我把producer-dev.yml這個配置文件中自動以的ip改爲123.123.123.123
,這是後需要用到在服務端配置的暴露觸發消息中心的地址,先獲取下,然後再訪問接口,就可以獲取到新改的ip了

更改配置文件的ip
在這裏插入圖片描述
用postman訪問接口http://127.0.0.1:12000/actuator/bus-refresh(這個地址正是config服務端所暴露的地址bus-refresh)
在這裏插入圖片描述
再重新訪問接口
http://127.0.0.1:8081/user/3

可以看到已經獲取到新的ip了
在這裏插入圖片描述
上邊這種方式是手動剛問http://127.0.0.1:12000/actuator/bus-refresh刷新的配置文件,還有一種方法可以實現配置的全自動刷新,就是修改配置文件後自動調用刷新方法,需要藉助GitHub的WebHooks
在這裏插入圖片描述
這裏可能由於127.0.0.1添加不成功,如果你的也是本地的話,可以將127.0.0.1換成自己電腦的ip就可以添加成功了,不過添加成功了本地不能測通,因爲本地的地址沒有暴露給互聯網,所以用這個是需要一個暴露在互聯網上的地址就可以,當然你把自己的ip地址暴露給互聯網也可以。

本文代碼是在上一篇博客的基礎上進行修改的,上一篇博客:【SpringCloud】配置中心config是什麼,以及如何和Eureka整合使用
整合配置中心config後的源代碼鏈接:https://download.csdn.net/download/cxh6863/12449406

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章