1:Config介紹
-
微服務意味着要將單體應用中的業務拆分成一個個子服務, 每個服務的粒度相對較小,因此係統中會出現大量的服務。由於每個服務都需要必要的配置信息才能運行,所以一套集中式的、動態的配置管理設施是必不可少的。
-
SpringCloud提供了ConfigServer來解決這個問題,我們每一個微服務自己帶着一個application.yml, 上百個配置文件的管理
-
SpringCloud Config爲微服務架構中的微服務提供集中化的外部配置支持,配置服務器爲各個不同微服務應用的所有環境提供了一箇中心化的的外部配置
2:Config工作機制
- SpringCloud Config分爲服務端和客戶端兩部分。
- 服務端也稱爲分佈式配置中心,它是一個獨立的微服務應用, 用來連接配置服務器併爲客戶端提供獲取配置信息,加密/解密信息等訪問接口
- 客戶端則是通過指定的配置中心來管理應用資源,以及與業務相關的配置內容,並在啓動的時候從配置中心獲取和加載配置信息配置服務器默認採用git來存儲配置信息,這樣就有助於對環境配置進行版本管理,並且可以通過git客戶端工具來方便的管理和訪問配置內容
3:Config可以幹嘛
- 集中管理配置文件
- 不同環境不同配置,動態化的配置更新,分環境部署比如dev/test/prod/beta/release
- 運行期間動態調整配置,不再需要在每個服務部署的機器上編寫配置文件,服務會向配置中心統一拉取配置自己的信息當配置發生變動時,服務不需要重啓即可感知到配置的變化並應用新的配置
- 將配置信息以REST接口的形式暴露
4:Config配置總控中心搭建
第一步:添加maven在pom.xml中
<!-- spring cloud config -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!-- eureka client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
第二步:添加配置在application.yml中
server:
port: 3344
spring:
application:
# 註冊進Eureka服務器的微服務名
name: cloud-spring-center
cloud:
config:
server:
git:
# git倉庫地址
uri: https://github.com/z-l-j/huasan.git
# 搜索目錄
search-paths:
- huasan
default-label: master
# 讀取分支
# label: master
eureka:
instance:
instance-id: config-cneter3344
prefer-ip-address: true
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/
第三步:添加主測試類並測試
@SpringBootApplication
@EnableConfigServer
public class ConfigCenterMain3344 {
public static void main(String[] args) {
SpringApplication.run(ConfigCenterMain3344.class, args);
}
}
和github倉庫中的文件是一樣的,說明成功讀取
5:Config客戶端配置與測試
第一步:配置pom.xml
<!-- spring cloud config client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!-- eureka client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
第二步:添加bootstrap.yml
server:
port: 3355
spring:
application:
name: config-client
cloud:
# config客戶端配置
config:
# 分支名稱
label: master
# 配置文件名稱
name: config
# 讀取後綴名稱
profile: dev
# 配置中心地址
uri: http://localhost:3344
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/
第三步:將配置信息以REST接口的形式暴露,編寫測試類
@RestController
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/configInfo")
public String getConfigInfo(){
return configInfo;
}
}
@SpringBootApplication
@EnableEurekaClient
public class ConfigClientMain3355 {
public static void main(String[] args) {
SpringApplication.run(ConfigClientMain3355.class, args);
}
}
如果我們現在修改github倉庫上的值,我們去刷新服務端會發現值改變,而如果刷新客戶端會發現值沒有改變
我們如果重啓3355,值纔會改變,如果以後有幾千臺這樣的微服務,難道我們也要這樣重啓嗎?非常耗時,所以我們下一章講到了Config動態刷新——手動版的
6:Config動態刷新——手動版
怎麼實現?看如下步驟
第一步:添加監控信息的maven依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
第二步:修改yml文件
# 暴露監控端點
management:
endpoints:
web:
exposure:
include: "*"
第三步:修改ConfigClientController
@RestController
@RefreshScope//加上這個註解
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/configInfo")
public String getConfigInfo(){
return configInfo;
}
}
第四步:發送post請求刷新3355
測試
值發生變化