[菜鳥SpringCloud實戰入門]第八章:通過訊息匯流排Spring Cloud Bus實現配置檔案重新整理(使用Kafka)

蠻三刀把刀發表於2019-03-20

在這裡插入圖片描述

前言

歡迎來到菜鳥SpringCloud實戰入門系列(SpringCloudForNoob),該系列通過層層遞進的實戰視角,來一步步學習和理解SpringCloud。

本系列適合有一定Java以及SpringBoot基礎的同學閱讀。

每篇文章末尾都附有本文對應的Github原始碼,方便同學除錯。

Github倉庫地址:

github.com/qqxx6661/sp…

菜鳥SpringCloud實戰入門系列

你可以通過以下兩種途徑檢視菜鳥SpringCloud實戰入門系列

前文回顧:

實戰版本

  • SpringBoot:2.0.3.RELEASE
  • SpringCloud:Finchley.RELEASE

-----正文開始-----

通過訊息匯流排Spring Cloud Bus更新客戶端配置檔案(使用Kafka)

前文提到,如果需要客戶端獲取到最新的配置資訊需要執行refresh,我們可以利用webhook的機制每次提交程式碼傳送請求來重新整理客戶端,當客戶端越來越多的時候,需要每個客戶端都執行一遍,這種方案就不太適合了。使用Spring Cloud Bus可以完美解決這一問題。

Spring bus的一個核心思想是通過分散式的啟動器對spring boot應用進行擴充套件,也可以用來建立一個多個應用之間的通訊頻道。目前唯一實現的方式是用AMQP訊息代理作為通道,同樣特性的設定(有些取決於通道的設定)在更多通道的文件中。其實本質是利用了MQ的廣播機制在分散式的系統中傳播訊息,目前常用的有Kafka和RabbitMQ。

以下是本文即將實現的架構:

在這裡插入圖片描述

更新客戶端配置檔案整個流程是:

  • 提交程式碼觸發post請求給bus/refresh
  • server端接收到請求併傳送給Spring Cloud Bus
  • Spring Cloud bus接到訊息並通知給其它客戶端
  • 其它客戶端接收到通知,請求Server端獲取最新配置
  • 全部客戶端均獲取到最新的配置

安裝kafka

請參考我的文章:

blog.csdn.net/qqxx6661/ar…

與config-server模組進行整合

config-server模組在上一章有介紹

新增依賴:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-kafka</artifactId>
</dependency>
複製程式碼

修改配置檔案,新增kafka配置:

springboot2中只需要這一句,不足要zk-node等設定啦。

# kafka
    stream:
      kafka:
        binder:
          brokers: localhost:9092
    bus:
      trace:
        enabled: true
複製程式碼

完整配置檔案如下:

server:
  port: 8769
spring:
  application:
    name: spring-cloud-config-server
  cloud:
    config:
      server:
        git:
          uri: https://xxxxxxxxxxxx.git # 配置git倉庫的地址
          search-paths: config-repo                              # git倉庫地址下的相對地址,可以配置多個,用,分割。
          username: xxxxxxxx                                     # git倉庫的賬號
          password: xxxxxxx                                   # git倉庫的密碼
    # kafka
    stream:
      kafka:
        binder:
          brokers: localhost:9092
    bus:
      trace:
        enabled: true

# 客戶端呼叫需要
management:
  endpoints:
    web:
      exposure:
        include: "*"
# 在服務中心註冊
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
複製程式碼

與config-client模組進行整合

服務端設定好了匯流排,客戶端當然也要和匯流排連線

依賴和配置檔案的修改,與config-server一模一樣,照著上面修改就可以了。

測試執行

分別執行eureka,config-server和config-client模組,這裡我們開啟兩個config-client模組,分別對應埠8771,8772.

啟動後的程式結構如下:

在這裡插入圖片描述

可以看到eureka裡註冊了服務端和兩個客戶端:

在這裡插入圖片描述

我們直接訪問config-server,檢視服務端現在的配置檔案:

http://localhost:8769/spring-cloud-config-dev.properties

在這裡插入圖片描述
檢視config-client的hello介面,得到配置檔案內容:

http://localhost:8771/hello

在這裡插入圖片描述

接下來,將配置檔案修改一下,加點字元。

在這裡插入圖片描述

隨後push到遠端伺服器。

然後訪問 http://localhost:8769/spring-cloud-config-dev.properties

發現已經服務端更新了。

在這裡插入圖片描述

這時候,我們需要做更新,傳送POST請求:

curl -X POST http://localhost:8769/actuator/bus-refresh
複製程式碼

這是springboot2的請求,和老的請求格式不同,可以從程式啟動時候的mapping日誌中看出。

在這裡插入圖片描述

這時候請求 :

http://localhost:8771/hello

http://localhost:8772/hello

在這裡插入圖片描述

更新成功!

你還可以通過trace來跟蹤匯流排事件:

一些場景下,我們可能希望知道Spring Cloud Bus事件傳播的細節。此時,我們可以跟蹤匯流排事件(RemoteApplicationEvent的子類都是匯流排事件)。

http://localhost:8769/actuator/httptrace
複製程式碼

在這裡插入圖片描述

本章程式碼

github.com/qqxx6661/sp…

參考

www.ityouknow.com/springcloud…

blog.csdn.net/superdangbo…

mp.weixin.qq.com/s/aZvrYpsWi…

-----正文結束-----

菜鳥SpringCloud實戰入門專欄全導航:通過以下兩種途徑檢視

關注我

我是蠻三刀把刀,後端開發。主要關注後端開發,資料安全,爬蟲等方向。

來微信和我聊聊:yangzd1102

個人公眾號:Rude3Knife

個人公眾號:Rude3Knife

如果文章對你有幫助,不妨收藏起來並轉發給您的朋友們~

相關文章