Consul Config 使用Git做版本控制的實現

冷冷gg發表於2018-03-15

Spring Cloud Config 原理

image

我們通過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 來同步你的配置檔案啦。

配置細節

image

如上圖,我配置檔案的例子。

FILES機制和Spring Cloud Config載入類似,application.yml 會被所有微服務模組載入公用,對應的application-name.yml 會被對應的微服務載入。

總結

  1. 經過整合Consul Config 已經完成了和Spring Cloud Config 相同的功能,Spring Cloud 微服務使用配置檔案過程中並沒有太大區別。
  2. 實時重新整理機制和前文《Consul微服務的配置中心體驗篇》提到的KEY-VALUE模式沒有什麼區別,git2consul 不僅支援webhook 的push,而且可以輪詢pull,類似於 Apollo 配置中心的部分功能
    1. 關於pig:基於Spring Cloud、oAuth2.0開發基於Vue前後分離的開發平臺,支援賬號、簡訊、SSO等多種登入,提供配套視訊開發教程

相關文章