micro config 配置管理

micro config

? micro 的配置文件是內(nèi)置的一個配合管理系統(tǒng),config 可以從 etcd ,consul,或者文件中加載配置信息,使用的時候也比較方便

source

config 需要從source 來加載配置,micro 已經(jīng)實現(xiàn)了12 中source 加載的方法,也就是說可以從12 種不同的媒介中載入配置,當然也可以自己寫插件來實現(xiàn)載入配置,這里列舉出幾個會比較常用的配置加載方式

  1. etcd
  2. consul
  3. file
  4. env
  5. cli
  6. url

在項目中使用到的是etcd,這里就用etcd 的使用舉例

配置加載的方法,使用起來是比較簡單

  1. 創(chuàng)建source
source := etcd.NewSource(
        etcd.WithAddress(address),
        )
  1. 加載配置
l.conf=config.NewConfig()
    err:=l.conf.Load(source)
    if err!=nil {
        logger.Fatal(err)
    }
  1. 獲取配置
value:=l.conf.Get(strings.Split(token_path,"/")...).Bytes()

從etcd加載配置需要注意的問題

etcd中存配置的時候需要時json格式存進去的,配置的路徑要注意,micro默認的配置路徑是

/micro/config

這里舉個例子就明白了,比如我們要存jwt 的私鑰文件進去要怎么存 ,前面說了,必須要存進去json 格式的才能行,那么就應該是這樣子

/micro/config/token:{"private":"123456abc"}

怎么取呢 ?看下源碼里面取值得方法

config.Config.Get(path ...string)

追蹤到一個實現(xiàn)

func (j *Json) GetPath(branch ...string) *Json {
    jin := j
    for _, p := range branch {
        jin = jin.Get(p)
    }
    return jin
}

可以看到了,其實是根據(jù)存值得路徑一層層取出來的。

取值的方法

//這樣子直接取到了private的值
// 123456abc
value:=l.conf.Get("micro","config","token","private").Bytes()

//或者這樣子,取到了token {\"private\":\"123456abc\"}
value:=l.conf.Get("micro","config","token").Bytes()

etcd 動態(tài)更新,Config里面的watch 方法允許我們訂閱配置的變更,從而做出反應

//配置更新的方法
func (l *Token) enableAutoUpdate(path ...string) {
    go func() {
        for {
            w, err := l.conf.Watch(path...)
            if err != nil {
                logger.Error(err)
            }
            v, err := w.Next()
            if err != nil {
                logger.Error(err)
            }

            value := v.Bytes()
            l.PrivateKey=value

            logger.Info("New JWT privateKey:", string(l.PrivateKey))
        }
    }()
}

監(jiān)聽指定路徑的配置,來動態(tài)更新token 私鑰

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容