Golang Viper 远程配置读取与实时监听的正确操作

viper [Github 地址 ]是 Golang 领域中热门的配置文件加载库,可以支持本地、程序实时改动和远程配置文件的加载,同时还支持配置文件实时监听。

读取远程配置的代码很简单,只需要填写配置组件名称、地址和配置名称就可以了。例如下面的代码是从远端的配置中心 Consul 读取名称为 name 的配置

attachmentId-532

具体取值可以用 Get 方法。

但监听部分有点需要注意的,它提供了一个 watch 机制,可以检查配置变化并把新内容更新到当前运行内存。watch 对应的代码为 viper.WatchRemoteConfig() 。

值得一提的是,这个 watch 和我们常识中以为的 "watch" 不太一样。我们以为 watch 包含了实时检查和自动更新,实际上 viper 的 watch 只有自动更新,没有实现实时检查。

watch 部分的底层调用代码如下

attachmentId-531

这里并没有出现循环或者定时操作,只有单次的调用返回。因此我们需要自己开一个协程不停地去调用它的 watch

attachmentId-533

这样就能够实现真的 watch 功能了。这里还有一点要注意,for watch 期间需要设置时间间隔,一方面缓解远程配置中心的读取压力,一方面也不需要那么实时的配置更新;除了 for 循环 + Sleep 之外,也可以用 Tikcer 来实现定时操作;

猜你喜欢

转载自juejin.im/post/7018028626587156493