SpringCloud微服務(wù)架構(gòu)開(kāi)發(fā)實(shí)戰(zhàn):微服務(wù)的集中化配置
微服務(wù)的集中化配置:為什么需要集中化配置
應(yīng)用一般都會(huì)有配置文件,即便號(hào)稱(chēng)是“零配置”的Spring Boot應(yīng)用,也無(wú)法完全做到不使用配置文件,畢竟配置文件就是為了迎合軟件的個(gè)性化需求。一個(gè)帶配置的應(yīng)用程序,部署了多個(gè)實(shí)例在若干臺(tái)機(jī)器上,如果配置發(fā)生了變化,那么,就需要對(duì)該應(yīng)用所有的實(shí)例進(jìn)行配置的變更。
隨著單塊架構(gòu)向微服務(wù)架構(gòu)演進(jìn)之后,微服務(wù)的應(yīng)用數(shù)量也會(huì)劇增。同時(shí),每個(gè)微服務(wù)都有自己的配置文件,這些文件如果都散落在各自的應(yīng)用中,必然會(huì)對(duì)應(yīng)用的升級(jí)和配置管理帶來(lái)挑戰(zhàn),畢竟誰(shuí)也沒(méi)有能力去手工配置那么多微服務(wù)的配置文件。而且,對(duì)運(yùn)維來(lái)說(shuō),一方面手工配置單工作量很大,幾乎不可能完成;另-方面,相對(duì)而言,人為的操作會(huì)加大出錯(cuò)的幾率。所以,外部化和中心化的配置中心,變成了解決微服務(wù)配置問(wèn)題的一一個(gè)有力的途徑。

配置分類(lèi)
在我們了解了集中化配置的必要性之后,來(lái)看看配置到底有哪幾種分類(lèi)。
1.按配置的來(lái)源劃分
按配置的來(lái)源劃分,主要有源代碼、文件、數(shù)據(jù)庫(kù)連接、遠(yuǎn)程調(diào)用等。
2.按適用的環(huán)境劃分
按配置的適用環(huán)境劃分,可分為開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境、預(yù)發(fā)布環(huán)境、生產(chǎn)環(huán)境等。
3.按配置的集成階段劃分
按配置的集成階段劃分,可分為編譯時(shí)、打包時(shí)和運(yùn)行時(shí)。編譯時(shí),最常見(jiàn)的有兩種,一 是源代碼級(jí)的配置,二是把配置文件和源代碼-起提交到代碼倉(cāng)庫(kù)中。打包時(shí),即在應(yīng)用打包階段通過(guò)某種方式將配置(一般是文件形式)打入最終的應(yīng)用包中。運(yùn)行時(shí),是指應(yīng)用啟動(dòng)前并不知道具體的配置,而是在啟動(dòng)時(shí),先從本地或遠(yuǎn)程獲取配置,然后再正常啟動(dòng)。
4.按配置的加載方式劃分
按配置的加載方式劃分,可分為啟動(dòng)加載和動(dòng)態(tài)加載配置。
啟動(dòng)加載是指應(yīng)用在啟動(dòng)時(shí)獲取配置,并且只獲取-次,在應(yīng)用運(yùn)行過(guò)程中不會(huì)再去加載。這類(lèi)配置通常是不會(huì)經(jīng)常變更的,如端口號(hào)、線程池大小等。
動(dòng)態(tài)加載是指應(yīng)用在運(yùn)行過(guò)程中,隨時(shí)都可以獲取到的配置,這些配置意味著會(huì)在應(yīng)用運(yùn)行過(guò)程中經(jīng)常被修改。
配置中心的需求
創(chuàng)建符合要求的、易于使用的配置中心,至少需要滿足以下幾個(gè)核心需求。
面向可配置的編碼。編碼過(guò)程中,應(yīng)及早考慮將后期可能經(jīng)常變更的數(shù)據(jù),設(shè)置為可以配置的配置項(xiàng),從而避免在代碼里面硬編碼。
●隔離性。不同部署環(huán)境下,應(yīng)用之間的配置是相互隔離的,例如,非生產(chǎn)環(huán)境的配置不能用于
生產(chǎn)環(huán)境。
●一致性。相同部署環(huán)境下的服務(wù)器應(yīng)用配置應(yīng)該具有一致性,即同個(gè)應(yīng)用的所有的實(shí)例使用同一份配置。
●集中化配置。在分布式環(huán)境下,應(yīng)用配置應(yīng)該具備可管理性,即提供遠(yuǎn)程管理配置的能力。
Spring Cloud Config
Spring Cloud Config致力于為分布式系統(tǒng)中的外部化配置提供支持。其中,Spring Cloud Config又分為了供服務(wù)器( Config Server )和客戶端( Config Client )兩個(gè)版本。借助Config Server,可以在所有環(huán)境中管理應(yīng)用程序的外部屬性。SpringCloudConfig的客戶端和服務(wù)器上的概念都與Spring的Environment 和PropertySource抽象-致, 所以它們非常適合Spring應(yīng)用程序,但也可以與任何運(yùn)行在任何語(yǔ)言的應(yīng)用程序-起使用。當(dāng)應(yīng)用程序從開(kāi)發(fā)到測(cè)試轉(zhuǎn)移到部署管道時(shí),你可以通過(guò)管理這些環(huán)境之間的配置,來(lái)確保應(yīng)用程序具有在遷移時(shí)所需運(yùn)行的所有內(nèi)容。
Config Server存儲(chǔ)后端的默認(rèn)實(shí)現(xiàn)使用了Git,因此它可以輕松地支持標(biāo)記版本的配置環(huán)境,
并且可以通過(guò)廣泛的工具來(lái)訪問(wèn)管理內(nèi)容。
本文將著重介紹如何使用Spring Cloud Config來(lái)實(shí)現(xiàn)集中化的配置中心。

使用Config實(shí)現(xiàn)的配置中心
本節(jié)將在
micro-weather-eureka-client基礎(chǔ)上,創(chuàng)建- - 個(gè)以micro- weather-configserver作為配置
中心的服務(wù)端,創(chuàng)建一- 個(gè)以micro- weather- config client作為配置中心的客戶端。
開(kāi)發(fā)環(huán)境
●Gradle 4.0。
●Spring Boot 2.0.0.M3。
●Spring Cloud Starter Netfix Eureka Client Finchley.M2。
●Spring Cloud Config Server Finchley.M2。
●Spring Cloud Config Client Finchley.M2。
創(chuàng)建配置中心的服務(wù)端
micro-weather- config- server是作為配置中心的服務(wù)端。
1.更改配置
要使用Spring Cloud Config Server,最簡(jiǎn)單的方式莫過(guò)于添加Spring Cloud Config Server依賴。
dependencies {
//添加Spring Cloud Config Server 依賴
compile ('org. spr ingf r amework. cloud: spring-cloud-config-server')
}2.一個(gè)簡(jiǎn)單的Config Server
要使用Config Server,只需要在程序的人口Application類(lèi)加上
org.springframework.cloud.config.server.EnableConfigServer注解,開(kāi)啟配置中心的功能既可。
package com. waylau . spring. cloud. weather;
import org. springframework. boot . SpringApplication;
import org. springf ramework. boot . autoconfigure .SpringBootApplication;
import org. springfr amework . cloud. client .discovery . EnableDiscovery
Client;
import org. springframework. cloud. config . server . EnableConfigServer;
/**
主應(yīng)用程序.
★@since 1.0.0 2017年11月06日
@author Way Lau
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigServer
public class Application {
public static void main(String[] args) {
SpringAppl ication. run (Application.class, args) ;
}
}其中,@EnableConfigServer 啟用了Config Server作為配置中心。
最后,修改application.properties。修改為如下配置。
spring. application. name: micro-weather-config- server
server .port=8888
eureka. client. serviceUrl . defaultZone: http://localhost: 8761/eureka/
spring. cloud. config . server .git.uri-https://github . com/waylau/
spring-cloud-microservices-development
spring. cloud. config . server.git.searchPaths=config-repo其中:
spring.
cloud.config.server.git.uri:配置Git倉(cāng)庫(kù)地址;
spring. cloud.config. server.gitsearchPaths:配置查找配置的路徑。
3.測(cè)試
啟動(dòng)應(yīng)用,訪問(wèn)ht:taho://88atherev,應(yīng)能看到如下輸出內(nèi)容,說(shuō)明服務(wù)啟動(dòng)正常。
{"name":"auther", "profiles": ["dev"],"label":nu1l, "version":" alf1e9b
8711754 f58 6dbed1513fc99acc25b7904", "state" :null, "property Sources":[]
}創(chuàng)建配置中心的客戶端
micro- weather-config-client是作為配置中心的客戶端。
1.更改配置
要使用Spring Cloud Confg Client,最簡(jiǎn)單的方式莫過(guò)于添加Spring Cloud Config Client依賴。
dependencies {
//添加Spring Cloud Config Client依賴
compile('org. springf ramework. cloud:spring-cloud-config-client')
}2.一個(gè)簡(jiǎn)單的Config Client
主應(yīng)用程序并不需要做特別的更改,與舊的micro-weather eureka-client應(yīng)用的源碼- -致。
@SpringBootApplication
@EnableDiscoveryClient
public class Application {
public static void main(String[] args) {
Spr ingApplication. run (Application.class, args) ;
}
}最后,修改application.propertieso修改為如下配置。
spring.application. name: micro-weather -config-clienteureka. client. serviceUrl . defaultZone: http://localhost :8761/eureka/
spring. cloud. config. profile=dev
spring. cloud. config.uri= http:/ /localhost: 8888/其中,spring.cloud.config.uri 指向了配置中心micro-weather config server的位置。
如何測(cè)試
在
htp/github.on/waylau/spring-cloud-microcrvices-development的config-repo 目錄下,我們事先已經(jīng)放置了一個(gè)配置文件micro-weather-config-client de.properties,里面簡(jiǎn)單地放置了micro-weather- config-client應(yīng)用的待測(cè)試的配置內(nèi)容。
auther=waylau . com讀者也可以在線查看該文件,看到如圖13-1所示的配置內(nèi)容。

其中,在配置中心的文件命名規(guī)則如下。
/ {application}/ {profile}[/ {label}]
/ {application}- {profile} . yml
/ {label}/ {application}-{profile} . yml
/ {application}-{profile} .properties
/ {label}/ {application}-{profile} . properties1.編寫(xiě)測(cè)試用例
在micro-weather config-client應(yīng)用中編寫(xiě)測(cè)試用例。
package com. waylau. spring. cloud. weather;
import static org.junit. Assert.assertEquals;
import org. junit. Test;
import org. junit. runner . RunWith;
import org. springframework. beans. factory . annotation. Value;
import org.springframework . boot. test. context. SpringBootTest;
import org. spr ingframework. test. context. junit4. Spr ingRunner;
/★★
*主應(yīng)用測(cè)試用例.
★@since 1.0.0 2017年11月06日
* @author "https://waylau. com">Way Lau
*/
@RunWi th (Spr ingRunner .class)
@SpringBootTest
public class ApplicationTests {
@Value ("${auther}")
private String auther;
@Test
public void contextLoads () {
assertEquals ("waylau. com", auther) ;
}
}2.運(yùn)行和測(cè)試
啟動(dòng)在之前章節(jié)中搭建的micro- weather-eureka-server和
micro-weather-config-server兩個(gè)項(xiàng)目。
啟動(dòng)micro-weather- config client應(yīng)用中編寫(xiě)測(cè)試用例ApplicationTests,如果一切正常, 說(shuō)明我們拿到了auther在配置中心中的內(nèi)容。
源碼
本節(jié)示例所涉及的源碼,見(jiàn)
micro-weather-eureka-server. micro-weather- eureka-client及mi-cro-weather-config-server和micro-weather-config-client。
本篇文章內(nèi)容給大家講解的是微服務(wù)的集中化配置
下篇文章給大家講解的是微服務(wù)的高級(jí)主題一自動(dòng)擴(kuò)展;
覺(jué)得文章不錯(cuò)的朋友可以轉(zhuǎn)發(fā)此文關(guān)注小編;
感謝大家的支持!
本文就是愿天堂沒(méi)有BUG給大家分享的內(nèi)容,大家有收獲的話可以分享下,想學(xué)習(xí)更多的話可以到微信公眾號(hào)里找我,我等你哦。
