-
API閘道器相關配置;
-
服務註冊與發現相關配置;
-
應用相關配置。
-
環境相關的全域性配置,如MySQL等外部依賴相關的配置和其他與環境相關的配置,這類配置在開發測試生產環境中存在差異,需要為不同環境配置不同的值。
-
應用本身的配置,一般為不經常性發生變化、可動態調整、開關的配置。這類配置比較穩定,在初始化後,只有在需要時才會改動,通常會設定預設值。這兩類配置在Consul上會放在不同的子目錄下。這樣QA、運維只需要關註環境差異部分即可。
/ProductLine_Prefix/Usage_Prefix/Environmental_Correlation_Prefix/Config_Item_Path
-
ProductLine_Prefix:用來隔離不同產品線的配置;
-
Usage_Prefix:用來區分配置的用途;
-
EnvironmentalCorrelationPrefix:用來分隔與環境相關的配置;
-
ConfigItemPath:具體的配置項。
-
以配置檔案的形式組織,Consul上的一個K/V,對應一個配置檔案,如nginx的配置檔案。
-
以配置項的形式組織,將配置檔案模板化,拆成一個個的配置項,每個配置項對應Consul上的一個K/V,多個配置項對應一個配置檔案。大部分配置檔案本身都是以K/V的形式組織的,均適合模板化,模板化後即可以按照配置項的特性,在Consul上分成不同的類別進行管理。
-
用Node和Lua實現的微服務的配置更新,使用Consul-Template來實現;
-
用Java實現的微服務的配置更新,透過Consul-Template工具(需要重啟應用)和在程式碼中引入Consul Client的依賴建立Watcher(熱更新)這兩種方式來實現。
{{ tree /consul/path/to/configFiles | explode | toJSONPretty }}
return {
host='{{ printf "%s/mysql/host" (env "CONSUL_CONFIG_PREFIX") | key }}',
port={{ keyOrDefault (printf "%s/mysql/port" (env "CON-SUL_CONFIG_PREFIX")) "3306" }},
user='{{ printf "%s/mysql/user" (env "CONSUL_CONFIG_PREFIX") | key }}',
password='{{ printf "%s/mysql/password" (env "CON-SUL_CONFIG_PREFIX") | key }}'
}
template {
source = "config-tree.ctmpl",
destination = "config-tree.json",
command = "sh updateAndReload.sh config-tree.json”
}
template {
source = "config-kv.ctmpl",
destination = "config-kv.lua",
command = "sh updateAndReload.sh config-kv.lua”
}