javascript
SpringCloud Config 分布式配置
SpringCloud Config 分布式配置
Dalston.RELEASE
Spring Cloud Config為分布式系統(tǒng)中的外部配置提供服務(wù)器和客戶(hù)端支持。使用Config Server,您可以在所有環(huán)境中管理應(yīng)用程序的外部屬性??蛻?hù)端和服務(wù)器上的概念映射與Spring Environment和PropertySource抽象相同,因此它們與Spring應(yīng)用程序非常契合,但可以與任何以任何語(yǔ)言運(yùn)行的應(yīng)用程序一起使用。隨著應(yīng)用程序通過(guò)從開(kāi)發(fā)人員到測(cè)試和生產(chǎn)的部署流程,您可以管理這些環(huán)境之間的配置,并確定應(yīng)用程序具有遷移時(shí)需要運(yùn)行的一切。服務(wù)器存儲(chǔ)后端的默認(rèn)實(shí)現(xiàn)使用git,因此它輕松支持標(biāo)簽版本的配置環(huán)境,以及可以訪(fǎng)問(wèn)用于管理內(nèi)容的各種工具。很容易添加替代實(shí)現(xiàn),并使用Spring配置將其插入。
概述
分布式系統(tǒng)面臨的–配置文件問(wèn)題
微服務(wù)意味著要將單體應(yīng)用中的業(yè)務(wù)拆分成一個(gè)個(gè)子服務(wù),每個(gè)服務(wù)的粒度相對(duì)較小,因此系統(tǒng)中會(huì)出現(xiàn)大量的服務(wù),由于每個(gè)服務(wù)都需要必要的配置信息才能運(yùn)行,所以一套集中式的,動(dòng)態(tài)的配置管理設(shè)施是必不可少的。spring cloud提供了configServer來(lái)解決這個(gè)問(wèn)題,我們每一個(gè)微服務(wù)自己帶著一個(gè)application.yml,那上百個(gè)的配置文件修改起來(lái),令人頭疼!
什么是SpringCloud config分布式配置中心?
spring cloud config 為微服務(wù)架構(gòu)中的微服務(wù)提供集中化的外部支持,配置服務(wù)器為各個(gè)不同微服務(wù)應(yīng)用的所有環(huán)節(jié)提供了一個(gè)中心化的外部配置。
spring cloud config 分為服務(wù)端和客戶(hù)端兩部分。
服務(wù)端也稱(chēng)為 分布式配置中心,它是一個(gè)獨(dú)立的微服務(wù)應(yīng)用,用來(lái)連接配置服務(wù)器并為客戶(hù)端提供獲取配置信息,加密,解密信息等訪(fǎng)問(wèn)接口。
客戶(hù)端則是通過(guò)指定的配置中心來(lái)管理應(yīng)用資源,以及與業(yè)務(wù)相關(guān)的配置內(nèi)容,并在啟動(dòng)的時(shí)候從配置中心獲取和加載配置信息。配置服務(wù)器默認(rèn)采用git來(lái)存儲(chǔ)配置信息,這樣就有助于對(duì)環(huán)境配置進(jìn)行版本管理。并且可用通過(guò)git客戶(hù)端工具來(lái)方便的管理和訪(fǎng)問(wèn)配置內(nèi)容。
spring cloud config 分布式配置中心能干嘛?
- 集中式管理配置文件
- 不同環(huán)境,不同配置,動(dòng)態(tài)化的配置更新,分環(huán)境部署,比如 /dev /test /prod /beta /release
- 運(yùn)行期間動(dòng)態(tài)調(diào)整配置,不再需要在每個(gè)服務(wù)部署的機(jī)器上編寫(xiě)配置文件,服務(wù)會(huì)向配置中心統(tǒng)一拉取配置自己的信息
- 當(dāng)配置發(fā)生變動(dòng)時(shí),服務(wù)不需要重啟,即可感知到配置的變化,并應(yīng)用新的配置
- 將配置信息以REST接口的形式暴露
與GitHub整合
新建倉(cāng)庫(kù)
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-4n9vz7sl-1610725208696)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20210115201322508.png)]
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-qi7gSLoW-1610725208697)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20210115201720254.png)]
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-2d74yGt9-1610725208700)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20210115201835756.png)]
下載遠(yuǎn)程代碼
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-XAo17UTs-1610725208703)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20210115203431941.png)]
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-S1m0B3NH-1610725208704)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20210115203520367.png)]
對(duì)git進(jìn)行配置
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-ZAemP9CE-1610725208707)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20210115203746644.png)]
生成公鑰
此文件夾下
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-JAggOKiA-1610725208708)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20210115205541149.png)]
ssh-keygen -t rsa -C “2764954910@qq.com”
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-YWd0iaMa-1610725208709)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20210115205752053.png)]
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-Kw2k8fjz-1610725208710)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20210115205742128.png)]
上傳代碼、
先下載再提交,對(duì)應(yīng)
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-5cca0c71-1610725208711)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20210115211052522.png)]
由于spring cloud config 默認(rèn)使用git來(lái)存儲(chǔ)配置文件 (也有其他方式,比如自持SVN 和本地文件),但是最推薦的還是git ,而且使用的是 http / https 訪(fǎng)問(wèn)的形式。
服務(wù)端
前提yml寫(xiě)對(duì)否則會(huì)報(bào)錯(cuò)
新建springcloud-config-server-3344模塊導(dǎo)入pom.xml依賴(lài)
<dependencies><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--config--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId><version>2.1.1.RELEASE</version></dependency><!--eureka--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId><version>1.4.6.RELEASE</version></dependency> </dependencies>resource下創(chuàng)建application.yml配置文件,Spring Cloud Config服務(wù)器從git存儲(chǔ)庫(kù)(必須提供)為遠(yuǎn)程客戶(hù)端提供配置:
server:port: 3344spring:application:name: springcloud-config-server# 連接碼云遠(yuǎn)程倉(cāng)庫(kù)cloud:config:server:git:# 注意是https的而不是sshuri: https://gitee.com/wdlyb/springcloud-config.git# 通過(guò) config-server可以連接到git,訪(fǎng)問(wèn)其中的資源以及配置~# 不加這個(gè)配置會(huì)報(bào)Cannot execute request on any known server 這個(gè)錯(cuò):連接Eureka服務(wù)端地址不對(duì) # 或者直接注釋掉eureka依賴(lài) 這里暫時(shí)用不到eureka eureka:client:register-with-eureka: falsefetch-registry: false主啟動(dòng)類(lèi)
@EnableConfigServer // 開(kāi)啟spring cloud config server服務(wù) @SpringBootApplication public class Config_server_3344 {public static void main(String[] args) {SpringApplication.run(Config_server_3344.class,args);} }將本地git倉(cāng)庫(kù)springcloud-config文件夾下新建的application.yml提交到碼云倉(cāng)庫(kù):
定位資源的默認(rèn)策略是克隆一個(gè)git倉(cāng)庫(kù)(在spring.cloud.config.server.git.uri),并使用它來(lái)初始化一個(gè)迷你SpringApplication。小應(yīng)用程序的Environment用于枚舉屬性源并通過(guò)JSON端點(diǎn)發(fā)布。
HTTP服務(wù)具有以下格式的資源:
/{application}/{profile}[/{label}] /{application}-{profile}.yml /{label}/{application}-{profile}.yml /{application}-{profile}.properties /{label}/{application}-{profile}.properties其中“應(yīng)用程序”作為SpringApplication中的spring.config.name注入(即常規(guī)的Spring Boot應(yīng)用程序中通常是“應(yīng)用程序”),“配置文件”是活動(dòng)配置文件(或逗號(hào)分隔列表的屬性),“l(fā)abel”是可選的git標(biāo)簽(默認(rèn)為“master”)。
測(cè)試訪(fǎng)問(wèn)http://localhost:3344/application-dev.yml
測(cè)試訪(fǎng)問(wèn) http://localhost:3344/application/test/master
測(cè)試訪(fǎng)問(wèn) http://localhost:3344/master/application-dev.yml
如果測(cè)試訪(fǎng)問(wèn)不存在的配置則不顯示 如:http://localhost:3344/master/application-aaa.yml
客戶(hù)端
將本地git倉(cāng)庫(kù)springcloud-config文件夾下新建的config-client.yml提交到碼云倉(cāng)庫(kù):
新建一個(gè)springcloud-config-client-3355模塊,并導(dǎo)入依賴(lài)
<!--config--> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-start --> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId><version>2.1.1.RELEASE</version> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency>resources下創(chuàng)建application.yml和bootstrap.yml配置文件
bootstrap.yml 是系統(tǒng)級(jí)別的配置
# 系統(tǒng)級(jí)別的配置 spring:cloud:config:name: config-client # 需要從git上讀取的資源名稱(chēng),不要后綴profile: devlabel: masteruri: http://localhost:3344application.yml 是用戶(hù)級(jí)別的配置
# 用戶(hù)級(jí)別的配置 spring:application:name: springcloud-config-client創(chuàng)建controller包下的ConfigClientController.java 用于測(cè)試
@RestController public class ConfigClientController {@Value("${spring.application.name}")private String applicationName; //獲取微服務(wù)名稱(chēng)@Value("${eureka.client.service-url.defaultZone}")private String eurekaServer; //獲取Eureka服務(wù)@Value("${server.port}")private String port; //獲取服務(wù)端的端口號(hào)@RequestMapping("/config")public String getConfig(){return "applicationName:"+applicationName +"eurekaServer:"+eurekaServer +"port:"+port;} }主啟動(dòng)類(lèi)
@SpringBootApplication public class ConfigClient {public static void main(String[] args) {SpringApplication.run(ConfigClient.class,args);} }測(cè)試:
啟動(dòng)服務(wù)端Config_server_3344 再啟動(dòng)客戶(hù)端ConfigClient
訪(fǎng)問(wèn):http://localhost:8201/config/
小案例
本地新建config-dept.yml和config-eureka.yml并提交到碼云倉(cāng)庫(kù)
這里配置文件內(nèi)容不再列舉直接到代碼中看把。
新建springcloud-config-eureka-7001模塊,并將原來(lái)的springcloud-eureka-7001模塊下的內(nèi)容拷貝的該模塊。
1.清空該模塊的application.yml配置,并新建bootstrap.yml連接遠(yuǎn)程配置
spring:cloud:config:name: config-eureka # 倉(cāng)庫(kù)中的配置文件名稱(chēng)label: masterprofile: devuri: http://localhost:33442.在pom.xml中添加spring cloud config依賴(lài)
<!--config--> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-config --> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId><version>2.1.1.RELEASE</version> </dependency>3.主啟動(dòng)類(lèi)
@SpringBootApplication @EnableEurekaServer //EnableEurekaServer 服務(wù)端的啟動(dòng)類(lèi),可以接受別人注冊(cè)進(jìn)來(lái)~ public class ConfigEurekaServer_7001 {public static void main(String[] args) {SpringApplication.run(ConfigEurekaServer_7001.class,args);} }4.測(cè)試
第一步:啟動(dòng) Config_Server_3344,并訪(fǎng)問(wèn) http://localhost:3344/master/config-eureka-dev.yml 測(cè)試
第二部:啟動(dòng)ConfigEurekaServer_7001,訪(fǎng)問(wèn) http://localhost:7001/ 測(cè)試
顯示上圖則成功
新建springcloud-config-dept-8001模塊并拷貝springcloud-provider-dept-8001的內(nèi)容
同理導(dǎo)入spring cloud config依賴(lài)、清空application.yml 、新建bootstrap.yml配置文件并配置
spring:cloud:config:name: config-deptlabel: masterprofile: devuri: http://localhost:3344主啟動(dòng)類(lèi)
@SpringBootApplication @EnableEurekaClient //在服務(wù)啟動(dòng)后自動(dòng)注冊(cè)到Eureka中! @EnableDiscoveryClient //服務(wù)發(fā)現(xiàn)~ @EnableCircuitBreaker // public class ConfigDeptProvider_8001 {public static void main(String[] args) {SpringApplication.run(ConfigDeptProvider_8001.class,args);}//增加一個(gè) Servlet@Beanpublic ServletRegistrationBean hystrixMetricsStreamServlet(){ServletRegistrationBean registrationBean = new ServletRegistrationBean(new HystrixMetricsStreamServlet());registrationBean.addUrlMappings("/actuator/hystrix.stream");return registrationBean;} }總結(jié)
以上是生活随笔為你收集整理的SpringCloud Config 分布式配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 诺基亚手机n9(诺基亚手机n93i)
- 下一篇: 京东推出云电脑京东推出云电脑是真的吗