go微服务框架Kratos笔记 使用nacos作为远端配置中心

初识nacos

nacos是阿里开源的一款用于动态服务发现、配置管理和服务管理的平台。

官方介绍,Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。 官方文档

nacos的安装

根据文档启动一个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得到如下的结果

至些可以看到读取到正确的配置了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值