[菜鳥SpringCloud實戰入門]第八章:經過消息總線Spring Cloud Bus實現配置文件刷新(使用Kafka)

在這裏插入圖片描述

前言

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

本系列適合有必定Java以及SpringBoot基礎的同窗閱讀。node

每篇文章末尾都附有本文對應的Github源代碼,方便同窗調試。git

Github倉庫地址:github

github.com/qqxx6661/sp…web

菜鳥SpringCloud實戰入門系列

你能夠經過如下兩種途徑查看菜鳥SpringCloud實戰入門系列spring

前文回顧:後端

實戰版本

  • 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。springboot

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

在這裏插入圖片描述

更新客戶端配置文件整個流程是:

  • 提交代碼觸發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

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

相關文章
相關標籤/搜索