微服务配置中心是干啥的_微服务入门到精通-分布式配置中心(续)
本文接之前的《Spring Cloud構(gòu)建微服務(wù)架構(gòu)(四)分布式配置中心》,繼續(xù)來說說Spring Cloud Config的使用。
先來回顧一下,在前文中我們完成了什么:
- 構(gòu)建了config-server,連接到Git倉庫
- 在Git上創(chuàng)建了一個(gè)config-repo目錄,用來存儲(chǔ)配置信息
- 構(gòu)建了config-client,來獲取Git中的配置信息
在本文中,我們繼續(xù)來看看Spring Cloud Config的一些其他能力。
高可用問題
傳統(tǒng)作法
通常在生產(chǎn)環(huán)境,Config Server與服務(wù)注冊中心一樣,我們也需要將其擴(kuò)展為高可用的集群。在之前實(shí)現(xiàn)的config-server基礎(chǔ)上來實(shí)現(xiàn)高可用非常簡單,不需要我們?yōu)檫@些服務(wù)端做任何額外的配置,只需要遵守一個(gè)配置規(guī)則:將所有的Config Server都指向同一個(gè)Git倉庫,這樣所有的配置內(nèi)容就通過統(tǒng)一的共享文件系統(tǒng)來維護(hù),而客戶端在指定Config Server位置時(shí),只要配置Config Server外的均衡負(fù)載即可,就像如下圖所示的結(jié)構(gòu):
注冊為服務(wù)
雖然通過服務(wù)端負(fù)載均衡已經(jīng)能夠?qū)崿F(xiàn),但是作為架構(gòu)內(nèi)的配置管理,本身其實(shí)也是可以看作架構(gòu)中的一個(gè)微服務(wù)。所以,另外一種方式更為簡單的方法就是把config-server也注冊為服務(wù),這樣所有客戶端就能以服務(wù)的方式進(jìn)行訪問。通過這種方法,只需要啟動(dòng)多個(gè)指向同一Git倉庫位置的config-server就能實(shí)現(xiàn)高可用了。
配置過程也非常簡單,具體如下:
config-server配置
- 在pom.xml的dependencies節(jié)點(diǎn)中引入如下依賴,相比之前的config-server就,加入了spring-cloud-starter-eureka,用來注冊服務(wù)
- 在application.properties中配置參數(shù)eureka.client.serviceUrl.defaultZone以指定服務(wù)注冊中心的位置,詳細(xì)內(nèi)容如下:
- 在應(yīng)用主類中,新增@EnableDiscoveryClient注解,用來將config-server注冊到上面配置的服務(wù)注冊中心上去。
- 啟動(dòng)該應(yīng)用,并訪問http://localhost:1111/,可以在Eureka Server的信息面板中看到config-server已經(jīng)被注冊了。
config-client配置
- 同config-server一樣,在pom.xml的dependencies節(jié)點(diǎn)中新增spring-cloud-starter-eureka依賴,用來注冊服務(wù):
- 在bootstrap.properties中,按如下配置:
其中,通過eureka.client.serviceUrl.defaultZone參數(shù)指定服務(wù)注冊中心,用于服務(wù)的注冊與發(fā)現(xiàn),再將spring.cloud.config.discovery.enabled參數(shù)設(shè)置為true,開啟通過服務(wù)來訪問Config Server的功能,最后利用spring.cloud.config.discovery.serviceId參數(shù)來指定Config Server注冊的服務(wù)名。這里的spring.application.name和spring.cloud.config.profile如之前通過URI的方式訪問時(shí)候一樣,用來定位Git中的資源。
- 在應(yīng)用主類中,增加@EnableDiscoveryClient注解,用來發(fā)現(xiàn)config-server服務(wù),利用其來加載應(yīng)用配置
- 沿用之前我們創(chuàng)建的Controller來加載Git中的配置信息
- 完成了上述配置之后,我們啟動(dòng)該客戶端應(yīng)用。若啟動(dòng)成功,訪問http://localhost:1111/,可以在Eureka Server的信息面板中看到該應(yīng)用已經(jīng)被注冊成功了。
- 訪問客戶端應(yīng)用提供的服務(wù):http://localhost:7002/from,此時(shí),我們會(huì)返回在Git倉庫中didispace-dev.properties文件配置的from屬性內(nèi)容:”git-dev-1.0”。
配置刷新
有時(shí)候,我們需要對配置內(nèi)容做一些實(shí)時(shí)更新的場景,那么Spring Cloud Config是否可以實(shí)現(xiàn)呢?答案顯然是可以的。下面,我們看看如何進(jìn)行改造來實(shí)現(xiàn)配置內(nèi)容的實(shí)時(shí)更新。
在改造程序之前,我們先將config-server和config-client都啟動(dòng)起來,并訪問客戶端提供的REST APIhttp://localhost:7002/from來獲取配置信息,可以獲得返回內(nèi)容為:git-dev-1.0。接著,我們可以嘗試使用Git工具修改當(dāng)前配置的內(nèi)容,比如,將config-repo/didispace-dev.properties中的from的值從from=git-dev-1.0修改為from=git-dev-2.0,再訪問http://localhost:7002/from,可以看到其返回內(nèi)容還是git-dev-1.0。
下面,我們將在config-client端增加一些內(nèi)容和操作以實(shí)現(xiàn)配置的刷新:
- 在config-clinet的pom.xml中新增spring-boot-starter-actuator監(jiān)控模塊,其中包含了/refresh刷新API。
- 重新啟動(dòng)config-clinet,訪問一次http://localhost:7002/from,可以看到當(dāng)前的配置值
- 修改Git倉庫config-repo/didispace-dev.properties文件中from的值
- 再次訪問一次http://localhost:7002/from,可以看到配置值沒有改變
- 通過POST請求發(fā)送到http://localhost:7002/refresh,我們可以看到返回內(nèi)容如下,代表from參數(shù)的配置內(nèi)容被更新了
- 再次訪問一次http://localhost:7002/from,可以看到配置值已經(jīng)是更新后的值了
通過上面的介紹,大家不難想到,該功能還可以同Git倉庫的Web Hook功能進(jìn)行關(guān)聯(lián),當(dāng)有Git提交變化時(shí),就給對應(yīng)的配置主機(jī)發(fā)送/refresh請求來實(shí)現(xiàn)配置信息的實(shí)時(shí)更新。但是,當(dāng)我們的系統(tǒng)發(fā)展壯大之后,維護(hù)這樣的刷新清單也將成為一個(gè)非常大的負(fù)擔(dān),而且很容易犯錯(cuò),那么有什么辦法可以解決這個(gè)復(fù)雜度呢?后續(xù)我們將繼續(xù)介紹如何通過Spring Cloud Bus來實(shí)現(xiàn)以消息總線的方式進(jìn)行通知配置信息的變化,完成集群上的自動(dòng)化更新。
本文作者 程序猿DD-翟永超 ,
轉(zhuǎn)載自http://blog.didispace.com/spring-cloud-starter-dalston-8-6/
總結(jié)
以上是生活随笔為你收集整理的微服务配置中心是干啥的_微服务入门到精通-分布式配置中心(续)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bizmsg是什么文件可以删除吗_C盘里
- 下一篇: 管道的另一端上无任何进程。_历史上突然消