SpringCloud09---Spring Cloud Config 分散式配置
1. 分散式系統面臨的配置檔案問題
微服務意味著要將單體應用中的業務拆分成一個個子服務,每個服務的粒度相對較小,因此係統中會出現大量的服務,由於每個服務都需要必要的配置資訊才能執行,所以一套集中式的,動態的配置管理設施是必不可少的。spring cloud提供了configServer來解決這個問題,我們每一個微服務自己帶著一個application.yml,那上百個的配置檔案修改起來,令人頭疼!
spring cloud config 為微服務架構中的微服務提供集中化的外部支援,配置伺服器為各個不同微服務應用的所有環節提供了一個中心化的外部配置。
-
spring cloud config 分為服務端
-
服務端也稱為分散式配置中心,它是一個獨立的微服務應用,用來連線配置伺服器併為客戶端提供獲取配置資訊,加密,解密資訊等訪問介面。
-
客戶端則是通過指定的配置中心來管理應用資源,以及與業務相關的配置內容,並在啟動的時候從配置中心獲取和載入配置資訊。配置伺服器預設採用git來儲存配置資訊,這樣就有助於對環境配置進行版本管理。並且可用通過git客戶端工具來方便的管理和訪問配置內容。
2. spring cloud config 分散式配置中心能幹嘛
-
集中式管理配置檔案
-
不同環境,不同配置,動態化的配置更新,分環境部署,比如 /dev /test /prod /beta /release
-
執行期間動態調整配置,不再需要在每個服務部署的機器上編寫配置檔案,服務會向配置中心統一拉取配置自己的資訊
-
當配置發生變動時,服務不需要重啟,即可感知到配置的變化,並應用新的配置
-
將配置資訊以REST介面的形式暴露
3. 入門案例
3.1 服務端
1、新建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> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies>
2、本地git倉庫springcloud-config資料夾下新建的application.yml提交到碼雲倉庫
3、application.yml配置檔案,Spring Cloud Config伺服器從git儲存庫(必須提供)為遠端客戶端提供配置
server:
port: 3344
spring:
application:
name: springcloud-config-server
# 連線碼雲遠端倉庫
cloud:
config:
server:
git:
# 注意是https的而不是ssh
uri: http://gitee.com/qi-chao666/springcloud-config.git
# 通過 config-server可以連線到git,訪問其中的資源以及配置~
4、主啟動類
@EnableConfigServer // 開啟spring cloud config server服務
@SpringBootApplication
public class Config_server_3344 {
public static void main(String[] args) {
SpringApplication.run(Config_server_3344.class,args);
}
}
5、測試訪問http://localhost:3344/application-dev.yml
3.2 客戶端
1、將本地git倉庫springcloud-config資料夾下新建的config-client.yml提交到碼雲倉庫
2、新建一個springcloud-config-client-3355模組,並匯入依賴
3、resources下建立application.yml和bootstrap.yml配置檔案
【bootstrap.yml 是系統級別的配置】
# 系統級別的配置
spring:
cloud:
config:
name: config-client # 需要從git上讀取的資源名稱,不要字尾
profile: dev
label: master
uri: http://localhost:3344
【application.yml 是使用者級別的配置】
# 使用者級別的配置
spring:
application:
name: springcloud-config-client
4、建立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;
}
}
5、主啟動類
@SpringBootApplication
public class ConfigClient {
public static void main(String[] args) {
SpringApplication.run(ConfigClient.class,args);
}
}
6、測試:啟動服務端Config_server_3344 再啟動客戶端ConfigClient,訪問:http://localhost:8201/config/