Spring Cloud構(gòu)建微服務(wù)架構(gòu)分布式配置中心

在本文中,我們將學(xué)習(xí)如何構(gòu)建一個(gè)基于Git存儲(chǔ)的分布式配置中心巴元,并對(duì)客戶(hù)端進(jìn)行改造论矾,并讓其能夠從配置中心獲取配置信息并綁定到代碼中的整個(gè)過(guò)程。

準(zhǔn)備配置倉(cāng)庫(kù)

  • 準(zhǔn)備一個(gè)git倉(cāng)庫(kù)沛简,可以在碼云或Github上創(chuàng)建都可以齐鲤。

  • 假設(shè)我們讀取配置中心的應(yīng)用名為config-client,那么我們可以在git倉(cāng)庫(kù)中該項(xiàng)目的默認(rèn)配置文件config-client.yml

info:
profile: default

為了演示加載不同環(huán)境的配置椒楣,我們可以在git倉(cāng)庫(kù)中再創(chuàng)建一個(gè)針對(duì)dev環(huán)境的配置文件config-client-dev.yml:

info:
profile: dev

構(gòu)建配置中心
通過(guò)Spring Cloud Config來(lái)構(gòu)建一個(gè)分布式配置中心非常簡(jiǎn)單给郊,只需要三步:

創(chuàng)建一個(gè)基礎(chǔ)的Spring Boot工程,命名為:config-server-git撒顿,并在pom.xml中引入下面的依賴(lài)(省略了parent和dependencyManagement部分):

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>

創(chuàng)建Spring Boot的程序主類(lèi)丑罪,并添加@EnableConfigServer注解荚板,開(kāi)啟Spring Cloud Config的服務(wù)端功能凤壁。


@EnableConfigServer
@SpringBootApplication
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}

在application.yml中添加配置服務(wù)的基本信息以及Git倉(cāng)庫(kù)的相關(guān)信息吩屹,例如:


spring
application:
name: config-server
cloud:
config:
server:
git:
uri: http://git.oschina.net/didispace/config-repo-demo/
server:
port: 1201

到這里,使用一個(gè)通過(guò)Spring Cloud Config實(shí)現(xiàn)拧抖,并使用Git管理配置內(nèi)容的分布式配置中心就已經(jīng)完成了煤搜。我們可以將該應(yīng)用先啟動(dòng)起來(lái),確保沒(méi)有錯(cuò)誤產(chǎn)生唧席,然后再?lài)L試下面的內(nèi)容擦盾。

如果我們的Git倉(cāng)庫(kù)需要權(quán)限訪(fǎng)問(wèn),那么可以通過(guò)配置下面的兩個(gè)屬性來(lái)實(shí)現(xiàn)淌哟;
spring.cloud.config.server.git.username:訪(fǎng)問(wèn)Git倉(cāng)庫(kù)的用戶(hù)名
spring.cloud.config.server.git.password:訪(fǎng)問(wèn)Git倉(cāng)庫(kù)的用戶(hù)密碼

完成了這些準(zhǔn)備工作之后迹卢,我們就可以通過(guò)瀏覽器、POSTMAN或CURL等工具直接來(lái)訪(fǎng)問(wèn)到我們的配置內(nèi)容了徒仓。訪(fǎng)問(wèn)配置信息的URL與配置文件的映射關(guān)系如下:

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
上面的url會(huì)映射{application}-{profile}.properties對(duì)應(yīng)的配置文件腐碱,其中{label}對(duì)應(yīng)Git上不同的分支,默認(rèn)為master掉弛。我們可以嘗試構(gòu)造不同的url來(lái)訪(fǎng)問(wèn)不同的配置內(nèi)容症见,比如,要訪(fǎng)問(wèn)master分支殃饿,config-client應(yīng)用的dev環(huán)境谋作,就可以訪(fǎng)問(wèn)這個(gè)url:http://localhost:1201/config-client/dev/master,并獲得如下返回:


{
"name": "config-client",
"profiles": [
"dev"
],
"label": "master",
"version": null,
"state": null,
"propertySources": [
{
"name": "http://git.oschina.net/didispace/config-repo-demo/config-client-dev.yml",
"source": {
"info.profile": "dev"
}
},
{
"name": "http://git.oschina.net/didispace/config-repo-demo/config-client.yml",
"source": {
"info.profile": "default"
}
}
]
}

我們可以看到該Json中返回了應(yīng)用名:config-client乎芳,環(huán)境名:dev遵蚜,分支名:master,以及default環(huán)境和dev環(huán)境的配置內(nèi)容奈惑。

構(gòu)建客戶(hù)端

在完成了上述驗(yàn)證之后谬晕,確定配置服務(wù)中心已經(jīng)正常運(yùn)作,下面我們嘗試如何在微服務(wù)應(yīng)用中獲取上述的配置信息携取。

  • 創(chuàng)建一個(gè)Spring Boot應(yīng)用攒钳,命名為config-client,并在pom.xml中引入下述依賴(lài):

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
</dependencies>

創(chuàng)建Spring Boot的應(yīng)用主類(lèi)雷滋,具體如下:


@SpringBootApplication
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}

創(chuàng)建bootstrap.yml配置不撑,來(lái)指定獲取配置文件的config-server-git位置,例如:


spring:
application:
name: config-client
cloud:
config:
uri: http://localhost:1201/
profile: default
label: master
server:
port: 2001

上述配置參數(shù)與Git中存儲(chǔ)的配置文件中各個(gè)部分的對(duì)應(yīng)關(guān)系如下:

spring.application.name:對(duì)應(yīng)配置文件規(guī)則中的{application}部分
spring.cloud.config.profile:對(duì)應(yīng)配置文件規(guī)則中的{profile}部分
spring.cloud.config.label:對(duì)應(yīng)配置文件規(guī)則中的{label}部分
spring.cloud.config.uri:配置中心config-server的地址
這里需要格外注意:上面這些屬性必須配置在bootstrap.properties中晤斩,這樣config-server中的配置信息才能被正確加載焕檬。

在完成了上面你的代碼編寫(xiě)之后,讀者可以將config-server-git澳泵、config-client都啟動(dòng)起來(lái)

{
"profile": "default"
}

另外实愚,我們也可以修改config-client的profile為dev來(lái)觀(guān)察加載配置的變化。

從現(xiàn)在開(kāi)始,我這邊會(huì)將近期研發(fā)的springcloud微服務(wù)云架構(gòu)的搭建過(guò)程和精髓記錄下來(lái)腊敲,幫助更多有興趣研發(fā)spring cloud框架的朋友击喂,希望可以幫助更多的好學(xué)者。大家來(lái)一起探討spring cloud架構(gòu)的搭建過(guò)程及如何運(yùn)用于企業(yè)項(xiàng)目碰辅。完整項(xiàng)目的源碼來(lái)源 技術(shù)支持1791743380

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末懂昂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子没宾,更是在濱河造成了極大的恐慌凌彬,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件循衰,死亡現(xiàn)場(chǎng)離奇詭異铲敛,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)会钝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)原探,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人顽素,你說(shuō)我怎么就攤上這事咽弦。” “怎么了胁出?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵型型,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我全蝶,道長(zhǎng)闹蒜,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任抑淫,我火速辦了婚禮绷落,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘始苇。我一直安慰自己砌烁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布催式。 她就那樣靜靜地躺著函喉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荣月。 梳的紋絲不亂的頭發(fā)上初坠,一...
    開(kāi)封第一講書(shū)人閱讀 49,985評(píng)論 1 291
  • 那天甫男,我揣著相機(jī)與錄音,去河邊找鬼课锌。 笑死浩村,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼奸柬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了啤握?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤晶框,失蹤者是張志新(化名)和其女友劉穎排抬,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體授段,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蹲蒲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侵贵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片届搁。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖窍育,靈堂內(nèi)的尸體忽然破棺而出卡睦,到底是詐尸還是另有隱情,我是刑警寧澤漱抓,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布表锻,位于F島的核電站,受9級(jí)特大地震影響乞娄,放射性物質(zhì)發(fā)生泄漏瞬逊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一仪或、第九天 我趴在偏房一處隱蔽的房頂上張望确镊。 院中可真熱鬧,春花似錦范删、人聲如沸蕾域。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)束铭。三九已至,卻和暖如春厢绝,著一層夾襖步出監(jiān)牢的瞬間契沫,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工昔汉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留懈万,地道東北人拴清。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像会通,于是被迫代替她去往敵國(guó)和親口予。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

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