前言
歡迎來到菜鳥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)入門系列:
- 關(guān)注我的公眾號(hào):Rude3Knife 點(diǎn)擊公眾號(hào)下方:技術(shù)推文——SpringCloud
- 菜鳥SpringCloud實(shí)戰(zhàn)入門專欄導(dǎo)航頁(CSDN)
前文回顧:
- [菜鳥SpringCloud實(shí)戰(zhàn)入門]第一章:構(gòu)建多模塊的Maven項(xiàng)目+創(chuàng)建注冊中心Eureka子模塊
- [菜鳥SpringCloud實(shí)戰(zhàn)入門]第二章:創(chuàng)建服務(wù)提供者并在Eureka進(jìn)行注冊
- [菜鳥SpringCloud實(shí)戰(zhàn)入門]第三章:將Eureka改造為高可用集群
- [菜鳥SpringCloud實(shí)戰(zhàn)入門]第四章:遠(yuǎn)程調(diào)用服務(wù)實(shí)戰(zhàn)
- [菜鳥SpringCloud實(shí)戰(zhàn)入門]第五章:熔斷器Hystrix的使用 + 可視化監(jiān)控Hystrix Dashboard和Turbine
- [菜鳥SpringCloud實(shí)戰(zhàn)入門]第六章:配置中心Spring Cloud Config初體驗(yàn)
- [菜鳥SpringCloud實(shí)戰(zhàn)入門]第七章:配置中心客戶端主動(dòng)刷新機(jī)制 + 配置中心服務(wù)化和高可用改造
- ...更多文章請查看上方:菜鳥SpringCloud入門實(shí)戰(zhàn)專欄導(dǎo)航頁
實(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)容:

接下來,將配置文件修改一下,加點(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í)候請求 :

更新成功!
你還可以通過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)注我的公眾號(hào):Rude3Knife 點(diǎn)擊公眾號(hào)下方:技術(shù)推文——SpringCloud
- 菜鳥SpringCloud實(shí)戰(zhàn)專欄(CSDN)
關(guān)注我
我是蠻三刀把刀,后端開發(fā)。主要關(guān)注后端開發(fā),數(shù)據(jù)安全,爬蟲等方向。
來微信和我聊聊:yangzd1102
Github個(gè)人主頁:
原創(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
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

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