消息總線 —— Spring Cloud Bus

1 SpringCloudBus干啥的呢?

由我上一篇文章集中配置組件SpringCloudConfig
我們已經(jīng)知道了配置文件可以在遠端做一個便捷的統(tǒng)一管理,這比較方便我們?nèi)ゲ榭春托薷?br> 但是呢,如果我們更新碼云中的配置文件,那客戶端數(shù)據(jù)查的是未修改狀態(tài)數(shù)據(jù),證明修改服務(wù)器中的配置并沒有更新立刻到工程,只有重新啟動程序才會讀取配置。 那我們?nèi)绻朐诓恢貑⑽⒎?wù)的情況下更新配置如何來實現(xiàn)呢? 我們使用SpringCloudBus來實現(xiàn)配置的自動更新

代碼實現(xiàn) 主要利用了springboot的監(jiān)聽和消息中間件(這里用的rabbitmq)

1. config服務(wù)端

(1)修改config統(tǒng)一配置文件管理微服務(wù)的pom.xml,引用消息總線和rabbit依賴

       <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)修改application.yml ,添加配置

spring:
  rabbitmq:
    host: 192.144.144.144

management:
  endpoints:
    web:
      exposure:
        include: bus-refresh //config里的消息總線配置
2 修改需要實時監(jiān)聽配置文件更新的微服務(wù)模塊

我們還是以基礎(chǔ)模塊為例,加入消息總線
(1)修改base工程 ,引入依賴

這里發(fā)現(xiàn)導入bus模塊時候與已有mysql版本沖突,具體的是mysql的drive無法識別,高版本的要求的driver不是com.mysql.jdbc.Driver,而我們使用的是dirver:com.mysql.jdbc.Driver,故為了防止引入jar包后由于我們沒有指定mysql的版本號系統(tǒng)自動匹對更高版本的,所以我們這里特別引入了mysql的版本

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

        <dependency><!-- springboot監(jiān)聽器 監(jiān)聽rabbitmq是否傳入refresh-bus配置文件刷新-->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-actuator</artifactId>
        </dependency>
        <dependency><!--消息總線bus-->
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-bus</artifactId>
        </dependency>
   <dependency> //bus版本沖突,這里特別引用了mysql版本
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

(2)在碼云的配置文件中配置rabbitMQ的地址:

  rabbitmq:
    host: 192.144.144.144

(2)啟動config模塊 ,eureka模塊和base模塊 看是否正常運行

(3)修改碼云上的配置文件 ,將數(shù)據(jù)庫連接IP 改為127.0.0.1 ,在本地部署一份數(shù)據(jù) 庫。

(4)postman測試 Url: http://127.0.0.1:12000/actuator/bus-refresh Method: post

(5)再次觀察輸出的數(shù)據(jù)是否是讀取了本地的mysql數(shù)據(jù)。
這樣就搞定了

\color{red}{注意:}

我們上面自動刷新的配置信息僅限于框架自己的配置(比如數(shù)據(jù)庫的鏈接地址)我們可以進行更新

如果我們在配置文件中定義了一些自己的自定義信息
比如:

yml文件中寫
zyh: 177
我們在項目中定義
@value("${zyh}")
private String zyh;

這樣搞的話,只能得到zyh的信息,如果我們在碼云中修改,它是無法得到新的值的
如果們向得到新的值
需要在類上定義

@RefreshScope
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容