Spring Cloud Config震庭,Spring Cloud Bus動態(tài)刷新配置

SpringCloudConfig是什么?

SpringCloudConfig為微服務(wù)架構(gòu)中的微服務(wù)提供集中化的外部配置支持,配置服務(wù)器為各個(gè)不同微服務(wù)應(yīng)用的所有環(huán)境提供了一個(gè)中心化的外部配置.

SpringCloudConfig為分布式系統(tǒng)中的外部配置提供服務(wù)器和客戶端支持刀脏。Config Server在所有環(huán)境中管理應(yīng)用程序的外部屬性。服務(wù)器存儲后端的默認(rèn)使用git,支持標(biāo)簽版本的配置環(huán)境超凳。

最簡單的配置中心就是啟動一個(gè)服務(wù)作為服務(wù)方愈污,之后各個(gè)需要獲取配置的服務(wù)作為客戶端來這個(gè)服務(wù)方獲取配置。

1.在github創(chuàng)建倉庫springcloud-config,在master分支下創(chuàng)建兩個(gè)文件:config-dev.yml,config-test.yml對應(yīng)實(shí)際開發(fā)中的測試分支和開發(fā)分支.

配置信息

服務(wù)端獲取github上的配置信息

創(chuàng)建SpringBoot項(xiàng)目轮傍,作為服務(wù)端,項(xiàng)目名稱:springcloud-config-server-3344

1.pom.xml中引入maven依賴

pom.xml

2.創(chuàng)建bootstrap.yml,application.yml.

bootstrap.yml和application.yml兩個(gè)文件的區(qū)別:

application.yml是用戶級別的配置項(xiàng)

bootstrap.yml是系統(tǒng)級別的钙畔,優(yōu)先級更高。

Spring Cloud會創(chuàng)建一個(gè)“Bootstrap Context”,作為Spring應(yīng)用的Application Context的上下文金麸,初始化的時(shí)候擎析,Bootstrap負(fù)責(zé)從外部源加載配置屬性并解析配置,這兩個(gè)上下文共享一個(gè)從外部獲取的Environment挥下。Bootstrap屬性有更高的優(yōu)先級揍魂,默認(rèn)情況下,他們不會被本地配置覆蓋棚瘟。BootstrapContext和AppliactionContext有著不同的約定现斋,所以新增了一個(gè)bootstrap.yml文件,保證Bootstrap.Context和ApplicationContext的配置分離.

要將Client模塊下的application.yml文件改為application.yml是很關(guān)鍵的偎蘸。因?yàn)閎ootstrap.yml是比application.yml先加載的庄蹋,而且優(yōu)先級更高。

bootstrap.yml
application.xml

3.SpringCloudConfigServer啟動類

SpringCloudConfigSercer

4.運(yùn)行迷雪,測試限书。Server獲取github上的配置信息。

Spring Cloud Config 有它的一套訪問規(guī)則章咧,通過這套規(guī)則在瀏覽器上直接訪問就可以倦西。

/{application}/{profile}[/{label}]

/{application}-{profile}.yml

/{label}/{application}-{profile}.yml

/{application}-{profile}.properties

/{label}/{application}-{profile}.properties

{application} 就是應(yīng)用名稱,對應(yīng)到配置文件上來赁严,就是配置文件的名稱部分.

{profile} 就是配置文件的版本扰柠,項(xiàng)目有開發(fā)版本粉铐、測試環(huán)境版本、生產(chǎn)環(huán)境版本卤档,對應(yīng)到配置文件上來就是以 application-{profile}.yml 加以區(qū)分蝙泼,例如application-dev.yml、application-sit.yml劝枣、application-prod.yml踱承。

{label} 表示 git 分支,默認(rèn)是 master 分支哨免,如果項(xiàng)目是以分支做區(qū)分也是可以的茎活,那就可以通過不同的 label 來控制訪問不同的配置文件了

測試結(jié)果

客戶端從服務(wù)端獲取GitHub上的配置信息

1.創(chuàng)建Client項(xiàng)目,名稱springcloud-config-client-3355琢唾,從服務(wù)端springcloud-config-server-3344獲取配置信息载荔。

(1)pom.xml導(dǎo)入maven依賴〔商遥客戶端導(dǎo)入的是config,服務(wù)端導(dǎo)入server

pom.yml

(2)創(chuàng)建bootstrap.yml,application.yml

label:對應(yīng)GitHub上的分支懒熙;name:文件的名稱;profile:文件版本后綴普办;uri:服務(wù)端訪問連接.拼湊起來就是之前測試的鏈接http://localhost:3344/config-dev.yml

bootstrap.yml
application.yml

(3)創(chuàng)建controller包工扎,創(chuàng)建ConfigController類,屬性對應(yīng)github文件里面的字段

(4)創(chuàng)建SpringCloudConfigClient啟動類

(5)運(yùn)行衔蹲,測試http://localhost:3355/configInfo,客戶端從服務(wù)端獲取GitHub上的配置信息

通過以上步驟肢娘,client可以通過server獲取GitHub上的配置信息。但是當(dāng)配置改變是舆驶,client不能立刻反應(yīng)過來橱健,即時(shí)刷新。

spring cloud bus實(shí)現(xiàn)自動刷新配置

Spring Cloud Bus提供了批量刷新配置的機(jī)制沙廉,它使用輕量級的消息代理(例如RabbitMQ拘荡、Kafka等)連接分布式系統(tǒng)的節(jié)點(diǎn),這樣就可以通過Spring Cloud Bus廣播配置的變化或者其他的管理指令撬陵。

什么是總線

在微服務(wù)架構(gòu)的系統(tǒng)中珊皿,通常會使用輕量級的消息代理來構(gòu)建一個(gè)共用的消息主題,并讓系統(tǒng)中所有微服務(wù)實(shí)例都連接上來巨税。由于該主題中產(chǎn)生的消息會被所有實(shí)例監(jiān)聽和消費(fèi)蟋定,所以稱它為消息總線,在總線上的各個(gè)實(shí)例垢夹,都可以方便地廣播一些需要讓其他連接在該主題上的實(shí)例都知道的消息溢吻。

基本原理

ConfigClient實(shí)例都監(jiān)聽MQ中同一個(gè)topic(默認(rèn)是SpringCloudBus)當(dāng)一個(gè)服務(wù)刷新數(shù)據(jù)的時(shí)候,它會把這個(gè)信息放入topic中果元,這樣其他監(jiān)聽同一Topic的服務(wù)就能得到通知促王,然后去更新自身的配置。

(1)安裝RabbitMQ而晒,配置環(huán)境蝇狼。

什么是RabbitMQ

兩個(gè)(多個(gè))系統(tǒng)間需要通過定時(shí)任務(wù)來同步某些數(shù)據(jù),異構(gòu)系統(tǒng)的不同進(jìn)程間相互調(diào)用、通訊,消息服務(wù)讓你可以解決這些問題倡怎。

消息服務(wù)擅長于解決多系統(tǒng)迅耘、異構(gòu)系統(tǒng)間的數(shù)據(jù)交換(消息通知/通訊)問題,也可以把它用于系統(tǒng)間服務(wù)的相互調(diào)用(RPC)监署。RabbitMQ就是當(dāng)前最主流的消息中間件之一颤专。

1.RabbitMQ是一個(gè)由erlang開發(fā)的AMQP(Advanced Message Queue 高級消息隊(duì)列協(xié)議 )的開源實(shí)現(xiàn),能夠?qū)崿F(xiàn)異步消息處理

(1)RabbitMQ是一個(gè)消息代理:它接受和轉(zhuǎn)發(fā)消息钠乏。

優(yōu)點(diǎn):異步消息處理

?業(yè)務(wù)解耦錯(cuò)峰流控

靈活的路由(Flexible Routing) :在消息進(jìn)入隊(duì)列之前栖秕,通過 Exchange 來路由消息的。對于典型的路由功能晓避,RabbitMQ 已經(jīng)提供了一些內(nèi)置的 Exchange 來實(shí)現(xiàn)簇捍。針對更復(fù)雜的路由功能,可以將多個(gè) Exchange 綁定在一起俏拱,也通過插件機(jī)制實(shí)現(xiàn)自己的 Exchange 暑塑。

RabbitMQ網(wǎng)站端口號:15672,程序里面實(shí)現(xiàn)的端口為:5672

(2)queue隊(duì)列

Queue(隊(duì)列)RabbitMQ的作用是存儲消息锅必,隊(duì)列的特性是先進(jìn)先出事格。生產(chǎn)者生產(chǎn)消息最終被送到RabbitMQ的內(nèi)部對象Queue中去,而消費(fèi)者則是從Queue隊(duì)列中取出數(shù)據(jù)搞隐。

(3)消息隊(duì)列

?消息(Message)是指在應(yīng)用間傳送的數(shù)據(jù)分蓖。消息可以非常簡單,比如只包含文本字符串尔许,也可以更復(fù)雜么鹤,可能包含嵌入對象。?

消息隊(duì)列(Message Queue)是一種應(yīng)用間的通信方式味廊,消息發(fā)送后可以立即返回蒸甜,

由消息系統(tǒng)來確保消息的可靠傳遞。消息發(fā)布者只管把消息發(fā)布到 MQ 中而不用管誰來取余佛,消息使用者只管從 MQ 中取消息而不管是誰發(fā)布的柠新。這樣發(fā)布者和使用者都不用知道對方的存在。

(4)消息隊(duì)列中間件:kafka ? rabbitMQ ?activeMQ ? rocketMQ(可以處理分布式事務(wù))

2.在第一個(gè)項(xiàng)目springcloud-config-server-3344中添加入動態(tài)刷新功能

2.1pom.xml增加bus依賴

2.2bootstrap.yml增加rabbitmq配置和熱部署

啟動類不用進(jìn)行修改

3.在第二個(gè)項(xiàng)目springcloud-config-3355中引入動態(tài)刷新功能

3.1pom.xml引入一樣的依賴

pom.xml

3.2bootstrap.yml

bootstrap.yml

3.3Contrller類中加入@RefreshScope注解

(4)開始測試

4.1啟動rabbit-server

4.2修改github上的配置信息

4.3打開cmd,運(yùn)行curl -X POST "http://localhost:3344/actuator/bus-refresh"前面一部分是訪問服務(wù)端的連接

4.4刷新客戶端頁面辉巡,查看是否更新

5.定點(diǎn)局部刷新恨憎,某些客戶端的配置更新,某些不更新。在POST請求后面加上特定更新的客戶端名稱和端口號憔恳。

curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3355"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瓤荔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子钥组,更是在濱河造成了極大的恐慌输硝,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,331評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件程梦,死亡現(xiàn)場離奇詭異点把,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)屿附,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評論 3 398
  • 文/潘曉璐 我一進(jìn)店門郎逃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挺份,你說我怎么就攤上這事褒翰。” “怎么了压恒?”我有些...
    開封第一講書人閱讀 167,755評論 0 360
  • 文/不壞的土叔 我叫張陵影暴,是天一觀的道長。 經(jīng)常有香客問我探赫,道長型宙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,528評論 1 296
  • 正文 為了忘掉前任伦吠,我火速辦了婚禮妆兑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘毛仪。我一直安慰自己搁嗓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,526評論 6 397
  • 文/花漫 我一把揭開白布箱靴。 她就那樣靜靜地躺著腺逛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪衡怀。 梳的紋絲不亂的頭發(fā)上棍矛,一...
    開封第一講書人閱讀 52,166評論 1 308
  • 那天,我揣著相機(jī)與錄音抛杨,去河邊找鬼够委。 笑死,一個(gè)胖子當(dāng)著我的面吹牛怖现,可吹牛的內(nèi)容都是我干的茁帽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,768評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼潘拨!你這毒婦竟也來了吊输?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,664評論 0 276
  • 序言:老撾萬榮一對情侶失蹤战秋,失蹤者是張志新(化名)和其女友劉穎璧亚,沒想到半個(gè)月后讨韭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脂信,經(jīng)...
    沈念sama閱讀 46,205評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,290評論 3 340
  • 正文 我和宋清朗相戀三年透硝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了狰闪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,435評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡濒生,死狀恐怖埋泵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情罪治,我是刑警寧澤丽声,帶...
    沈念sama閱讀 36,126評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站觉义,受9級特大地震影響雁社,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晒骇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,804評論 3 333
  • 文/蒙蒙 一霉撵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洪囤,春花似錦徒坡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至剥啤,卻和暖如春锦溪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铐殃。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工海洼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人富腊。 一個(gè)月前我還...
    沈念sama閱讀 48,818評論 3 376
  • 正文 我出身青樓坏逢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子是整,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,442評論 2 359

推薦閱讀更多精彩內(nèi)容