68 lines
2.0 KiB
Go
68 lines
2.0 KiB
Go
|
package initialize
|
|||
|
|
|||
|
import (
|
|||
|
"ginDemo/config"
|
|||
|
"gitee.ltd/lxh/logger"
|
|||
|
"github.com/caarlos0/env/v6"
|
|||
|
"github.com/fsnotify/fsnotify"
|
|||
|
nr "github.com/lixh00/nacos-viper-remote"
|
|||
|
"github.com/spf13/viper"
|
|||
|
_ "github.com/spf13/viper/remote"
|
|||
|
)
|
|||
|
|
|||
|
var vp *viper.Viper
|
|||
|
|
|||
|
// 初始化Nacos
|
|||
|
func initNacos() {
|
|||
|
// 初始化Nacos配置
|
|||
|
if err := env.Parse(&config.Nacos); err != nil {
|
|||
|
panic(err)
|
|||
|
}
|
|||
|
if config.Nacos.Host == "" {
|
|||
|
logger.Say.Panic("Nacos配置错误")
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// 初始化配置文件
|
|||
|
func initConfig() {
|
|||
|
vp = viper.New()
|
|||
|
|
|||
|
// 配置 Viper for Nacos 的远程仓库参数
|
|||
|
nr.SetOptions(&nr.Option{
|
|||
|
Url: config.Nacos.Host, // nacos server 多地址需要地址用;号隔开,如 Url: "loc1;loc2;loc3"
|
|||
|
Port: config.Nacos.Port, // nacos server端口号
|
|||
|
NamespaceId: config.Nacos.NamespaceId, // nacos namespace
|
|||
|
GroupName: "DEFAULT_GROUP", // nacos group
|
|||
|
Config: nr.Config{DataId: config.Nacos.CenterConfigName}, // nacos DataID
|
|||
|
Auth: nil, // 如果需要验证登录,需要此参数
|
|||
|
})
|
|||
|
err := vp.AddRemoteProvider("nacos", config.Nacos.Host, "")
|
|||
|
if err != nil {
|
|||
|
logger.Say.Panicf("%s", err)
|
|||
|
}
|
|||
|
vp.SetConfigType("yaml")
|
|||
|
//尝试进行配置读取
|
|||
|
if err = vp.ReadRemoteConfig(); err != nil {
|
|||
|
logger.Say.Panic(err)
|
|||
|
}
|
|||
|
//异步监听Nacos中的配置变化,如发生配置更改,会直接同步到 viper实例中。
|
|||
|
err = vp.WatchRemoteConfigOnChannel()
|
|||
|
if err != nil {
|
|||
|
logger.Say.Errorf("监听远程配置变动失败: %v", err)
|
|||
|
}
|
|||
|
|
|||
|
// 解析配置文件为结构体
|
|||
|
if err = vp.Unmarshal(&config.Scd); err != nil {
|
|||
|
logger.Say.Panic(err)
|
|||
|
}
|
|||
|
vp.WatchConfig() // 监听配置文件变化
|
|||
|
vp.OnConfigChange(func(e fsnotify.Event) {
|
|||
|
logger.Say.Info("配置文件发生变动:", e.Name)
|
|||
|
if err = vp.Unmarshal(&config.Scd); err != nil {
|
|||
|
logger.Say.Panic(err)
|
|||
|
}
|
|||
|
// 配置文件发生变动,重新初始化一下连接信息
|
|||
|
initClient()
|
|||
|
})
|
|||
|
}
|