初识nacos
nacos是阿里开源的一款用于动态服务发现、配置管理和服务管理的平台。
官方介绍,Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。 官方文档
nacos的安装![](https://img-blog.csdnimg.cn/e46d1248f00e49ce8c80c11767e8f644.png)
根据文档启动一个nacos nacos快速开始 在nacos中创建一个配置
在kratos中使用
在internal下建立的一个config目录,并在该目录下编写一个config.go的文件,目录如下图所示
package config import ( "fmt" "github.com/fsnotify/fsnotify" "github.com/nacos-group/nacos-sdk-go/clients" "github.com/nacos-group/nacos-sdk-go/common/constant" "github.com/nacos-group/nacos-sdk-go/vo" "github.com/spf13/viper" "strings" ) //定义nacos配置 var ( defaultConfig *viper.Viper //远程配置中心实例 nacosIp string //nacosip地址 nacosPort uint64 //nacos端口 nacosDataId string //nacos配置的DataID nacosGroup string //nacos配置的group分组 ) // ThisConf 初始化viper,读取本地配置文件(需在本地建立配置文件) func ThisConf() *viper.Viper { localConfig := viper.New() localConfig.SetConfigFile("../../configs/config.yaml") //指定本地配置 //读取配置文件 if err := localConfig.ReadInConfig(); err != nil { panic(fmt.Errorf("Fatal error config file:%s\n", err)) } fmt.Println("ddddddddd") //监控配置文件的变化 localConfig.WatchConfig() localConfig.OnConfigChange(func(in fsnotify.Event) { fmt.Println("配置文件热加载。。。") }) return localConfig } // NacosInit 注册中心客户端配置 func NacosInit() vo.NacosClientParam { localConfig := ThisConf() //初始化viper defaultConfig = viper.New() //连接远程配置中心的实例 defaultConfig.SetConfigType("yaml") nacosIp = localConfig.GetString("nacos.ip") nacosPort = localConfig.GetUint64("nacos.port") nacosDataId = localConfig.GetString("nacos.dataId") nacosGroup = localConfig.GetString("nacos.group") //连接到配置中心 return vo.NacosClientParam{ //客户端配置 ClientConfig: &constant.ClientConfig{ NamespaceId: localConfig.GetString("nacos.namespaceId"), TimeoutMs: localConfig.GetUint64("nacos.timeoutMs"), NotLoadCacheAtStart: localConfig.GetBool("nacos.notLoadCacheAtStart"), LogDir: localConfig.GetString("nacos.logDir"), CacheDir: localConfig.GetString("nacos.cacheDir"), LogLevel: localConfig.GetString("nacos.logLevel"), }, //服务端配置 ServerConfigs: []constant.ServerConfig{ {IpAddr: nacosIp, Port: nacosPort}, }, } } // InitConfig 初始化nacos配置中心 func InitConfig() *viper.Viper { nacosClient, err := clients.NewConfigClient(NacosInit()) if err != nil { panic(fmt.Errorf("nacos初始化错误: %s \n", err)) } content, err := nacosClient.GetConfig(vo.ConfigParam{DataId: nacosDataId, Group: nacosGroup}) if err != nil { panic(fmt.Errorf("nacos读取配置错误: %s \n", err)) } err = defaultConfig.ReadConfig(strings.NewReader(content)) if err != nil { panic(fmt.Errorf("Viper解析配置失败: %s \n", err)) } //配置监听 err = nacosClient.ListenConfig(vo.ConfigParam{ DataId: nacosDataId, Group: nacosGroup, OnChange: func(namespace, group, dataId, data string) { fmt.Println("config changed group:" + group + ", dataId:" + dataId + ", content:" + data) //使用viper解析配置 err = defaultConfig.ReadConfig(strings.NewReader(data)) if err != nil { panic(fmt.Errorf("Viper解析配置失败: %s \n", err)) } }, }) return defaultConfig } // GetConfig 获取配置 func GetConfig() *viper.Viper { if defaultConfig == nil { defaultConfig = InitConfig() } return defaultConfig }
在config.yaml中配置nacos所需的参数
在需要引用配置的地方引用GetConfig()方法,如下图所示
project.name 对应Nacos上面的配置
这时运行kratos run得到如下的结果
至些可以看到读取到正确的配置了