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