SpringCloud(十三)——統一配置中心:config
Config元件簡介
spring cloud config 為微服務架構中的微服務提供集中化的外部支援,配置伺服器為各個不同微服務應用的所有環節提供了一個中心化的外部配置。
config(配置)又稱為 統一配置中心顧名思義,就是將配置統一管理,配置統一管理的好處是在日後大規模叢集部署服務應用時相同的服務配置一致,日後再修改配置只需要統一修改全部同步,不需要一個一個服務手動維護。
spring cloud config 分為服務端和客戶端兩部分。
服務端也稱為 分散式配置中心,它是一個獨立的微服務應用,用來連線配置伺服器併為客戶端提供獲取配置資訊,加密,解密資訊等訪問介面。
客戶端則是通過指定的配置中心來管理應用資源,以及與業務相關的配置內容,並在啟動的時候從配置中心獲取和載入配置資訊。配置伺服器預設採用git來儲存配置資訊,這樣就有助於對環境配置進行版本管理。並且可用通過git客戶端工具來方便的管理和訪問配置內容。
spring cloud config 分散式配置中心能幹嘛?
- 集中式管理配置檔案
- 不同環境,不同配置,動態化的配置更新,分環境部署,比如 /dev /test /prod /beta /release
- 執行期間動態調整配置,不再需要在每個服務部署的機器上編寫配置檔案,服務會向配置中心統一拉取配置自己的資訊
- 當配置發生變動時,服務不需要重啟,即可感知到配置的變化,並應用新的配置
- 將配置資訊以REST介面的形式暴露
環境搭建
由於spring cloud config 預設使用git來儲存配置檔案 (也有其他方式,比如自持SVN 和本地檔案),但是最推薦的還是git ,而且使用的是 http / https 訪問的形式。
1、在碼雲上新建倉庫
2、選擇HTTPS連線,點選複製
3、新建一個config-server模組springcloud-config-server-3344
4、新增相關依賴
<dependencies> <!--config server統一配置中心--> <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> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
5、編寫application.yaml配置檔案
server:
port: 3344
spring:
application:
name: springcloud-config-server
# 連線碼雲遠端倉庫
cloud:
config:
server:
git:
# 注意是https的而不是ssh
uri: https://gitee.com/luoxiao1104/springcloud-config.git
# 通過 config-server可以連線到git,訪問其中的資源以及配置~
default-label: master
6、編寫主啟動類
package com.study.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication_3344 {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication_3344.class,args);
}
}
7、啟動主啟動類測試是否成功
Config客戶端開發-遠端連線
config client :微服務
1、新建一個config客戶端模組springcloud-config-client-3355
2、匯入相關依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
3、編寫application.yaml配置檔案
server:
port: 3355
spring:
application:
name: springcloud-config-client
#Eureka配置,服務註冊到哪裡
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
instance:
instance-id: springcloud-cofig-client-3355 #修改Eureka預設描述資訊
#自定義一個屬性
name: zhangsan
4、編寫啟動類
package com.study.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class ConfigClientApplication_3355 {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication_3355.class,args);
}
}
5、編寫conroller測試
package com.study.springcloud.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
private static final Logger log = LoggerFactory.getLogger(DemoController.class);
@Value("${name}")
private String name;
@RequestMapping("/demo")
public String demo(){
log.info("demo ok!!!");
return "demo ok,name:"+name;
}
}
在專案中,配置裡面的屬性(如name屬性)可能會根據環境(開發環境,測試環境)不同,值也是不一樣的。所以我們在springboot中可以配置多套環境
1、新建開發環境application-dev.yaml
name: zhangsan-dev
2、新建測試環境application-test.yaml
name: lisi-test
3、在修改主配置檔案application.yaml
4、重新訪問 http://localhost:3355/demo
把配置檔案上傳到遠端倉庫
6、在Gitee上新建檔案
application.yaml配置檔案
application-dev.yaml配置檔案
application-test.yaml配置檔案
3個檔案
7、刪除專案中的所有yaml配置檔案
8、啟動config服務springcloud-config-client-3344
9、訪問localhost:3344/configclient-dev.yaml 獲取配置環境,快取到本地
檢視控制檯輸出快取的地址
10、在config客戶端=springcloud-config-client-3355建立bootstrap.yaml配置檔案
#config server地址
spring:
cloud:
config:
discovery:
#根據叢集註冊中心伺服器id獲取config sever,不要寫死,建議在叢集獲取
service-id: SPRINGCLOUD-CONFIG-SERVER
#開啟當前configclient 根據服務id去註冊中心獲取
enabled: true
#獲取配置檔案 1、分支 2、檔名 3、環境
label: master
name: configclient
profile: dev
#配置註冊中心
#Eureka配置,服務註冊到哪裡
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
instance:
instance-id: springcloud-cofig-client-3355 #修改Eureka預設描述資訊
11、啟動測試
1、啟動eureka叢集springcloud-eureka-7001
2、啟動config服務端springcloud-config-server-3344
3、啟動config客戶端springcloud-config-client-3355
4、更改bootstrap.yaml配置,重啟3355
注意
config客戶端配置如果使用application.yaml命名,會訪問遠端連線 http://localhost:8888 ,
application.yaml命名是用於已開發完成的專案
Config手動配置重新整理
當遠端git倉庫中配置發生變化時,不需要重啟微服務就可以直接讀取遠端修改之後的配置資訊,這種就叫做手動配置重新整理
1、在controller中新增@RefreshScope註解
2、在bootstrap.yaml配置檔案中新增 端點暴露,重啟。
3、修改遠端配置檔案
4、開啟控制檯輸入curl -X POST http://localhost:3355/actuator/refresh
配置完之後以後每次在遠端修改配置檔案只需要走第4步就可以了