java架構師高端課微服務06 Spring Cloud Config
主要內容
分布式配置中心介紹
基于Gitee管理配置文件
搭建分布式配置中心服務端
搭建分布式配置中心客戶端
配置熱刷新
學習目標

Spring Cloud?Config
一、?分布式配置中心介紹
1?什么是分布式配置中心
在常規(guī)的開發(fā)中,每個微服務都包含代碼和配置。其配置包含服務配置、各類開關和業(yè)務配置。如果系統(tǒng)結構中的微服務節(jié)點較少,那么常規(guī)的代碼+配置的開發(fā)方式足以解決問題。當系統(tǒng)逐步迭代,其微服務會越來越復雜,慢慢演化成網狀依賴結構,這個時候常規(guī)的代碼+配置的開發(fā)方式就并不合適了,因為還要考慮整體系統(tǒng)的擴展性、伸縮性和耦合性等。這些問題中,配置的管理也是非常麻煩的。
如果還是以常規(guī)開發(fā)形式管理配置,則要承擔反復修改編譯代碼、重啟系統(tǒng)、重新打包等風險。所以,一個可以集中管理,帶有版本控制的配置中心應運而生。
spring cloud config就是一個配置中心。其采用集中式管理每個微服務的配置信息,并使用GIT等版本倉庫統(tǒng)一存儲配置內容,實現版本化管理控制。微服務與配置中心使用rest方式交互來實現可擴展的配置服務。
spring cloud config配置中心解決了微服務系統(tǒng)的配置中心化、配置版本控制、平臺獨立、語言獨立等問題,其特性如下:
提供服務端和客戶端支持(spring cloud config server和spring cloud config client)
集中式管理分布式環(huán)境中的配置信息
基于spring環(huán)境提供配置管理,與spring系列框架無縫結合
可用于任何語言開發(fā)環(huán)境
默認基于GIT倉庫實現版本控制
2?分布式配置中心結構圖

二、?基于Gitee管理配置文件
在Gitee中集中管理配置文件,為保證文件集中化管理,獨立創(chuàng)建倉庫。具體過程如下:
1?創(chuàng)建倉庫

2??創(chuàng)建文件并編輯內容
2.1?application-service-config.yml配置文件

2.2?application-service-config-dev.yml配置文件

三、?搭建分布式配置中心服務端
1?POM依賴


2??配置文件application.yml

3??啟動類

4??瀏覽器測試獲取Gitee中的配置文件
當配置中心服務端啟動后,可以通過瀏覽器訪問配置中心服務端應用,獲取我們保存在Gitee中的配置文件內容,具體訪問路徑格式如下:
http://config-server-ip:port/name/profile/label
name - Gitee中保存的配置文件核心命名
profile - Gitee中保存的配置文件擴展環(huán)境命名
label - Gitee中的倉庫分支
如訪問: http://localhost:8888/application-service-config/default/master
代表在Gitee中master分支下,查找命名為application-service-config.yml | application-service-config.properties配置文件。

四、?搭建分布式配置中心客戶端
每個Spring Cloud微服務應用(除Eureka和Config配置中心服務端)都可以看做是Spring Cloud Config客戶端應用,都可以通過Spring Cloud Config服務端動態(tài)獲取保存在Gitee中的配置文件。
1?POM依賴

2??配置文件 bootstrap.yml
使用優(yōu)先級最高的全局配置文件bootstrap.properties來配置當前應用啟動時訪問哪一個分布式配置中心服務端獲取配置文件。


一、?通過spring-boot-starter-actuator可以實現配置中心客戶端應用不重啟,當某事件觸配置熱刷新
發(fā)時,重新訪問配置中心服務端,獲取新的配置文件,并重新初始化本地環(huán)境。這種不重啟應用實現環(huán)境刷新的方式稱為熱刷新。
具體實現過程如下:
1?POM依賴


2??配置文件

3??測試熱刷新環(huán)境
發(fā)送POST請求到http://ip:port/actuator/refresh,應用會重新訪問配置中心服務端,加載最新的配置文件內容,并刷新當前應用環(huán)境。
4??代碼中使用遠程配置內容
如果代碼中使用了Gitee中保存的配置文件內容,那么希望熱刷新的時候,重新初始化對象屬性值,則需要在對應類型上增加注解@RefreshScope,通知Spring容器,當前類型的對象,在環(huán)境刷新時,需要重新初始化對象。


