「碼唄學院」史上最實用的SpringCloud九大組件第二招— 配置中心

「碼唄學院」史上最實用的SpringCloud九大組件第一招—注冊中心


接入說明

目前采用最新的1.xRelease版本:1.5.15.RELEASE

SpringCloud項目可以在start.spring.io下載各聘,不過更方便的應該是通過idea新建項目竞思,建立Spring Initializr項目

我一般習慣將具體實現(xiàn)服務用具體的服務名无宿,而公共組件用service-xxx來命名限嫌,當然還有一些比較固定名字的公共組件

Config

1. 新建項目

新建artifactId為service-config的服務

2. 導入依賴

依賴說明

actuator用于暴露監(jiān)控的接口

config-server是Config服務器的依賴

eureka是Eureka客戶端,這里配置中心依賴于注冊中心


3. 編寫啟動類

打開ServiceConfigApplication,在class上加入@EnableConfigServer注解并且加上@EnableEurekaClient,注冊到注冊中心

4. 修改配置

建立git倉庫

可以是本地倉庫,也可以是遠程倉庫册舞,我們用本地倉庫來模擬

找到一個目錄E:/config

git init 初始化倉庫

新建文件application.properties

git add .

git commit -m ‘init’

git push origin master

server.port=8888

spring.application.name=service-config

spring.cloud.config.server.git.uri=E:/config

# public

spring.cloud.config.discovery.enabled=true

spring.cloud.config.discovery.service-id=service-config

eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka,http://localhost:8762/eureka

management.security.enabled=false

配置中心默認端口8888

config.server.git.uri設置為git的本地地址

注意spring.cloud.config.server.git.uri必須配置在應用本地,否則不知道遠程配置的地址障般,而其他服務的配置都可以放到配置中心调鲸,這個是特別的discovery.enabled與discovery.service-id其實是客戶端的配置,配置中心自己是服務端也是客戶端挽荡,作為客戶端與其他服務一樣藐石,都需要通過配置中心去發(fā)現(xiàn)配置服務啟動,讀取公共配置discovery.enabled設置為通過注冊中心暴露服務discovery.service-id是配置中心對在注冊中心外暴露的id一致定拟,與server端配置的spring.application.name一致

defaultZone注冊中心地址

management.security.enabled用于關閉一些校驗權(quán)限

抽出公共配置–其他微服務共享

application.properties文件添加以下配置于微,并去掉service-config配置中的配置

eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka,http://localhost:8762/eureka

management.security.enabled=false

spring.cloud.config.discovery.enabled=true

spring.cloud.config.discovery.service-id=service-config

5. 啟動main

6. 驗證

訪問 localhost:8761/ 看到service-config已經(jīng)注冊了一臺

訪問 localhost:8888/service-config/default 就可以訪問到配置中心加載的配置了,中間改其他服務名青自,default是指配置的profile

Config集群

1. 修改配置文件

配置2個server株依,server1使用端口8888,server2使用端口8889

server1

server.port=8888

spring.application.name=service-config

spring.cloud.config.server.git.uri=E:/IdeaProjects/springcloud-test/config

# public

spring.cloud.config.discovery.enabled=true

spring.cloud.config.discovery.service-id=service-config

eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka,http://localhost:8762/eureka

management.security.enabled=false

server2

server.port=8889

spring.application.name=service-config

spring.cloud.config.server.git.uri=E:/IdeaProjects/springcloud-test/config

# public

spring.cloud.config.discovery.enabled=true

spring.cloud.config.discovery.service-id=service-config

eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka,http://localhost:8762/eureka

management.security.enabled=false

除了端口號不一樣延窜,其他都一樣恋腕,本質(zhì)上配置中心只要保證讀取的git地址一樣就可以了,客戶端只是過來拉配置逆瑞,git相當于數(shù)據(jù)庫

2. 啟動

啟動server1啟動server2

3. 驗證

訪問 localhost:8761/ 看到service-config已經(jīng)注冊了2臺訪問 localhost:8888/service-config/default 就可以訪問到配置中心加載的配置了訪問 localhost:8889/service-config/default 就可以訪問到配置中心加載的配置了

客戶端使用

1. 添加依賴

客戶端要通過注冊中心查找注冊中心服務荠藤,所以需要依賴注冊中心


2. 開啟注解

開啟注冊中心的配置即可@EnableDiscoveryClient,配置中心不需要額外的注解

3. 修改配置

eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka,http://localhost:8762/eureka

spring.cloud.config.discovery.enabled=true

spring.cloud.config.discovery.service-id=service-config

config.discovery.enabled與config.discovery.service-id是依賴配置中心啟動的核心配置获高,指定配置中心暴露的名稱

4. 編寫代碼

@RefreshScope

@RestController

classMessageController{

privatefinalString msg;

@Autowired

publicMessageController(@Value("${message}")String msg){

this.msg=msg;

? ? }

@RequestMapping("/msg")

publicStringread(){

returnmsg;

? ? }


}

@RefreshScope 注意這里如果想通過/refresh接口能實時刷新配置的話哈肖,需要加這個注解,沒有加的只是啟動時加載的數(shù)據(jù)不會更新注意這里進來保持好的使用習慣念秧,使用final來保存數(shù)據(jù)

疑問

1. 為什么一定通過注冊中心暴露配置中心服務淤井?

如果不通過注冊中心,客戶端的配置如下:

spring.cloud.config.uri=localhost:8888

如果修改修改了域名或者端口出爹,增加減少機器都需要去修改此啟動配置庄吼,則通過注冊中心就可以用其各種好處缎除,減少依賴

2. 配置中心為什么依賴注冊中心严就?怎么我看有的是注冊中心依賴配置中心图甜?

其實目前2種配置都有

注冊中心依賴配置中心的解釋:就是注冊中心也是一個服務次员,啟動所需要的配置從配置中心拉取负芋,同時可以動態(tài)變更救赐,啟動順序:先配置中心吱晒,再注冊中心,配置中心不能依賴注冊中心灭贷,否則無法啟動削茁。配置中心依賴注冊中心的解釋:配置中心如果注冊為集群模式那必然讓客戶端通過服務發(fā)現(xiàn)找到從注冊中心找到配置中心,所以配置中心一定要注冊到注冊中心啟動服務發(fā)現(xiàn)粟害。啟動順序:注冊中心蕴忆,再配置中心,這樣注冊中心的配置是不經(jīng)過配置中心的悲幅,而注冊中心的配置一般也是固定不變的針對第一種還有一種解:先啟動配置中心套鹅,開啟注冊失敗仍然可以啟動的配置,只是第一次注冊失敗依然可以啟動汰具,然后再啟動注冊中心卓鹿,可以兩全總體來說第二種更加合理一點,因為一般注冊中心的defaultZone與其他應用不一樣留荔,注冊中心的要排除掉自己的地址吟孙,而其他服務是全量,這樣我在做公共配置時比較統(tǒng)一聚蝶,不用開啟注冊中心的本地配置優(yōu)先不過其他解決方案中注冊中心與配置中心一般都是一體的杰妓,所以也就沒有這種相互依賴的尷尬,不過領域上確實是2個東西

3. 為什么配置中心讀取的配置變量聲明為final的碘勉,但是調(diào)用/refresh后帶@RefreshScope的對象里的final值還會發(fā)生變化稚失?

首先final是不會變的,所以spring是把整個@RefreshScope標注的bean重新創(chuàng)建了一遍final的好處是

控制只有配置中心才可以更改變量恰聘,在程序中是無法賦值替換的配置中心的數(shù)據(jù)都是很少去變化的句各,應該當做常量處理,final虛擬機有優(yōu)化可以保證線程安全晴叨,無狀態(tài)類與不可變類多線程安全

其他注冊中心

因為consul與zookeeper本身具備配置存儲的能力凿宾,所以這2個注冊中心的配置中心一般用他們定制的,而非用SpringCloudConfig

快速接入

暫略…

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兼蕊,一起剝皮案震驚了整個濱河市初厚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孙技,老刑警劉巖产禾,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異牵啦,居然都是意外死亡亚情,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門哈雏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來楞件,“玉大人衫生,你說我怎么就攤上這事⊥两” “怎么了罪针?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長黄伊。 經(jīng)常有香客問我泪酱,道長,這世上最難降的妖魔是什么还最? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任西篓,我火速辦了婚禮,結(jié)果婚禮上憋活,老公的妹妹穿的比我還像新娘岂津。我一直安慰自己,他們只是感情好悦即,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布吮成。 她就那樣靜靜地躺著,像睡著了一般辜梳。 火紅的嫁衣襯著肌膚如雪粱甫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天作瞄,我揣著相機與錄音茶宵,去河邊找鬼。 笑死宗挥,一個胖子當著我的面吹牛乌庶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播契耿,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼瞒大,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了搪桂?” 一聲冷哼從身側(cè)響起透敌,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎踢械,沒想到半個月后酗电,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡内列,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年撵术,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片德绿。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡荷荤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出移稳,到底是詐尸還是另有隱情蕴纳,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布个粱,位于F島的核電站古毛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏都许。R本人自食惡果不足惜稻薇,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胶征。 院中可真熱鬧塞椎,春花似錦、人聲如沸睛低。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钱雷。三九已至骂铁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間罩抗,已是汗流浹背拉庵。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留套蒂,地道東北人钞支。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像操刀,于是被迫代替她去往敵國和親伸辟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

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