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

在這里插入圖片描述

前言

歡迎來到菜鳥SpringCloud實(shí)戰(zhàn)入門系列(SpringCloudForNoob),該系列通過層層遞進(jìn)的實(shí)戰(zhàn)視角,來一步步學(xué)習(xí)和理解SpringCloud。

本系列適合有一定Java以及SpringBoot基礎(chǔ)的同學(xué)閱讀。

每篇文章末尾都附有本文對(duì)應(yīng)的Github源代碼,方便同學(xué)調(diào)試。

Github倉庫地址:

https://github.com/qqxx6661/springcloud_for_noob

菜鳥SpringCloud實(shí)戰(zhàn)入門系列

你可以通過以下兩種途徑查看菜鳥SpringCloud實(shí)戰(zhàn)入門系列

前文回顧:

實(shí)戰(zhàn)版本

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

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

通過消息總線Spring Cloud Bus更新客戶端配置文件(使用Kafka)

前文提到,如果需要客戶端獲取到最新的配置信息需要執(zhí)行refresh,我們可以利用webhook的機(jī)制每次提交代碼發(fā)送請求來刷新客戶端,當(dāng)客戶端越來越多的時(shí)候,需要每個(gè)客戶端都執(zhí)行一遍,這種方案就不太適合了。使用Spring Cloud Bus可以完美解決這一問題。

Spring bus的一個(gè)核心思想是通過分布式的啟動(dòng)器對(duì)spring boot應(yīng)用進(jìn)行擴(kuò)展,也可以用來建立一個(gè)多個(gè)應(yīng)用之間的通信頻道。目前唯一實(shí)現(xiàn)的方式是用AMQP消息代理作為通道,同樣特性的設(shè)置(有些取決于通道的設(shè)置)在更多通道的文檔中。其實(shí)本質(zhì)是利用了MQ的廣播機(jī)制在分布式的系統(tǒng)中傳播消息,目前常用的有Kafka和RabbitMQ。

以下是本文即將實(shí)現(xiàn)的架構(gòu):

在這里插入圖片描述

更新客戶端配置文件整個(gè)流程是:

  • 提交代碼觸發(fā)post請求給bus/refresh
  • server端接收到請求并發(fā)送給Spring Cloud Bus
  • Spring Cloud bus接到消息并通知給其它客戶端
  • 其它客戶端接收到通知,請求Server端獲取最新配置
  • 全部客戶端均獲取到最新的配置

安裝kafka

請參考我的文章:

https://blog.csdn.net/qqxx6661/article/details/88675520

與config-server模塊進(jìn)行整合

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

添加依賴:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-kafka</artifactId>
</dependency>

修改配置文件,添加kafka配置:

springboot2中只需要這一句,不足要zk-node等設(shè)置啦。

# 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倉庫地址下的相對(duì)地址,可以配置多個(gè),用,分割。
          username: xxxxxxxx                                     # git倉庫的賬號(hào)
          password: xxxxxxx                                   # git倉庫的密碼
    # kafka
    stream:
      kafka:
        binder:
          brokers: localhost:9092
    bus:
      trace:
        enabled: true

# 客戶端調(diào)用需要
management:
  endpoints:
    web:
      exposure:
        include: "*"
# 在服務(wù)中心注冊
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

與config-client模塊進(jìn)行整合

服務(wù)端設(shè)置好了總線,客戶端當(dāng)然也要和總線連接

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

測試運(yùn)行

分別運(yùn)行eureka,config-server和config-client模塊,這里我們開啟兩個(gè)config-client模塊,分別對(duì)應(yīng)端口8771,8772.

啟動(dòng)后的進(jìn)程結(jié)構(gòu)如下:

在這里插入圖片描述

可以看到eureka里注冊了服務(wù)端和兩個(gè)客戶端:

在這里插入圖片描述

我們直接訪問config-server,查看服務(wù)端現(xiàn)在的配置文件:

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

在這里插入圖片描述

查看config-client的hello接口,得到配置文件內(nèi)容:

http://localhost:8771/hello

在這里插入圖片描述

接下來,將配置文件修改一下,加點(diǎn)字符。

在這里插入圖片描述

隨后push到遠(yuǎn)程服務(wù)器。

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

發(fā)現(xiàn)已經(jīng)服務(wù)端更新了。

在這里插入圖片描述

這時(shí)候,我們需要做更新,發(fā)送POST請求:

curl -X POST http://localhost:8769/actuator/bus-refresh

這是springboot2的請求,和老的請求格式不同,可以從進(jìn)程啟動(dòng)時(shí)候的mapping日志中看出。

在這里插入圖片描述

這時(shí)候請求 :

http://localhost:8771/hello

http://localhost:8772/hello

在這里插入圖片描述

更新成功!

你還可以通過trace來跟蹤總線事件:

一些場景下,我們可能希望知道Spring Cloud Bus事件傳播的細(xì)節(jié)。此時(shí),我們可以跟蹤總線事件(RemoteApplicationEvent的子類都是總線事件)。

http://localhost:8769/actuator/httptrace
在這里插入圖片描述

本章代碼

https://github.com/qqxx6661/springcloud_for_noob/tree/master/08-spring-cloud-bus

參考

http://www.ityouknow.com/springcloud/2017/05/26/springcloud-config-eureka-bus.html

https://blog.csdn.net/superdangbo/article/details/78776532

https://mp.weixin.qq.com/s/aZvrYpsWiTuV9R_TfjBGpg

-----正文結(jié)束-----

菜鳥SpringCloud實(shí)戰(zhàn)入門專欄全導(dǎo)航:通過以下兩種途徑查看

關(guān)注我

我是蠻三刀把刀,后端開發(fā)。主要關(guān)注后端開發(fā),數(shù)據(jù)安全,爬蟲等方向。

來微信和我聊聊:yangzd1102

Github個(gè)人主頁:

https://github.com/qqxx6661

原創(chuàng)博客主要內(nèi)容

  • Java知識(shí)點(diǎn)復(fù)習(xí)全手冊
  • Leetcode算法題解析
  • 劍指offer算法題解析
  • Python爬蟲相關(guān)技術(shù)實(shí)戰(zhàn)
  • 后端開發(fā)相關(guān)技術(shù)實(shí)戰(zhàn)
  • SpringCloud實(shí)戰(zhàn)

同步更新公眾號(hào)及以下全部博客:

1. Csdn

http://blog.csdn.net/qqxx6661

2. 知乎

https://www.zhihu.com/people/yang-zhen-dong-1/

3. 掘金

https://juejin.im/user/5b48015ce51d45191462ba55

4. 簡書

http://www.itdecent.cn/u/b5f225ca2376

個(gè)人公眾號(hào):Rude3Knife

個(gè)人公眾號(hào):Rude3Knife

如果文章對(duì)你有幫助,不妨收藏起來并轉(zhuǎn)發(fā)給您的朋友們~

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

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

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