micro config
? micro 的配置文件是內(nèi)置的一個配合管理系統(tǒng)惯雳,config 可以從 etcd ,consul,或者文件中加載配置信息概龄,使用的時候也比較方便
source
config 需要從source 來加載配置馏艾,micro 已經(jīng)實現(xiàn)了12 中source 加載的方法绢彤,也就是說可以從12 種不同的媒介中載入配置卿吐,當然也可以自己寫插件來實現(xiàn)載入配置富弦,這里列舉出幾個會比較常用的配置加載方式
- etcd
- consul
- file
- env
- cli
- url
在項目中使用到的是etcd,這里就用etcd 的使用舉例
配置加載的方法灵嫌,使用起來是比較簡單
- 創(chuàng)建source
source := etcd.NewSource(
etcd.WithAddress(address),
)
- 加載配置
l.conf=config.NewConfig()
err:=l.conf.Load(source)
if err!=nil {
logger.Fatal(err)
}
- 獲取配置
value:=l.conf.Get(strings.Split(token_path,"/")...).Bytes()
從etcd加載配置需要注意的問題
etcd中存配置的時候需要時json格式存進去的,配置的路徑要注意葛作,micro默認的配置路徑是
/micro/config
這里舉個例子就明白了寿羞,比如我們要存jwt 的私鑰文件進去要怎么存 ,前面說了赂蠢,必須要存進去json 格式的才能行绪穆,那么就應(yīng)該是這樣子
/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 方法允許我們訂閱配置的變更第岖,從而做出反應(yīng)
//配置更新的方法
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 私鑰