Spring Cloud Config 原理
我們通過git 把配置檔案推送到遠端倉庫做版本控制,當版本發生變化的時候,遠端倉庫通過webhook機制推送訊息給 Config Server,Config Server 將修改通知傳送到訊息匯流排,然後所有的Config Client 進行配置重新整理。
非常巧妙的藉助了Git來做配置檔案修改的版本控制。
Consul Config 的FILES 機制
public enum Format {
/**
* Indicates that the configuration specified in consul is of type native key values.
*/
KEY_VALUE,
/**
* Indicates that the configuration specified in consul is of property style i.e.,
* value of the consul key would be a list of key=value pairs separated by new lines.
*/
PROPERTIES,
/**
* Indicates that the configuration specified in consul is of YAML style i.e., value
* of the consul key would be YAML format
*/
YAML,
/**
* Indicates that the configuration specified in consul uses keys as files.
* This is useful for tools like git2consul.
*/
FILES,
}
複製程式碼
Consul 提供以上的策略,key/value、yaml、properties,可以很簡單的通過Consule Config 的管理臺進行配置,我們主要來看FILES,就是我們也是Cloud Config 一樣,通過Git 來做版本控制,只是用Consul 做配置的分發和修改的通知。
原生的Consul不支援Git來做,需要藉助Consul 社群提供的另外一個工程 git2consul
非常簡單就下載就安裝好了。
主要來講一下初始化指令碼的 git2consul.json
{
"version":"1.0",
"local_store": "本地倉庫備份地址",
"logger":{
"name":"git2consul",
"streams":[
{
"level":"trace",
"type":"rotating-file",
"path":"生成日誌路徑/git2consul.log"
}
]
},
"repos":[
{
"name":"pig-config",
"url":"遠端倉庫地址",
"include_branch_name" : true, //分支資訊是否包含到請求中,建議使用
"branches":[
"dev"
],
"hooks":[
{
"type" : "polling", //更新策略定時重新整理的
"interval" : "1" //1分鐘
}
]
}
]
}
複製程式碼
啟動時候指定上邊的指令碼
./git2consul --config-file git2consul.json
複製程式碼
bootstarp.yml配置
spring:
application:
name: pig-auth
cloud:
consul:
host: localhost
port: 8500
config:
enabled: true
format: FILES
watch:
enabled: true
prefix: ${spring.application}/${spring.profiles.active}
profiles:
active: dev
複製程式碼
OK 已經可以使用了 git2consul 來同步你的配置檔案啦。
配置細節
如上圖,我配置檔案的例子。
FILES機制和Spring Cloud Config載入類似,application.yml 會被所有微服務模組載入公用,對應的application-name.yml 會被對應的微服務載入。
總結
- 經過整合Consul Config 已經完成了和Spring Cloud Config 相同的功能,Spring Cloud 微服務使用配置檔案過程中並沒有太大區別。
- 實時重新整理機制和前文《Consul微服務的配置中心體驗篇》提到的KEY-VALUE模式沒有什麼區別,git2consul 不僅支援webhook 的push,而且可以輪詢pull,類似於 Apollo 配置中心的部分功能