go语言操作之nacos配置中心

go语言nacos配置中心 nacos配置中心,由于是阿里开发的,所以官方文档支持中文,非常友好,这是官方的go的SDK,已经非常详细了 官方SDK网址 下面是

go语言nacos配置中心

nacos配置中心,由于是阿里开发的,所以官方文档支持中文,非常友好,这是官方的go的SDK,已经非常详细了

官方SDK网址

下面是例子,演示了golang如何使用从nacos获取配置的信息,返回的是字符串

package main
import (
	"fmt"
	"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"
	"time"
)
func main() {
	// 至少一个ServerConfig
	serverConfigs := []constant.ServerConfig{
		{
			IpAddr:      "192.168.72.146",
			Port:        8848,
		},
	}
	// 创建clientConfig
	clientConfig := constant.ClientConfig{
		NamespaceId:         "1cf91be1-d0e3-4494-aef7-b3cb8177e04e", // 如果需要支持多namespace,我们可以场景多个client,它们有不同的NamespaceId。当namespace是public时,此处填空字符串。
		TimeoutMs:           5000,
		NotLoadCacheAtStart: true,
		LogDir:              "tmp/nacos/log",
		CacheDir:            "tmp/nacos/cache",
		RotateTime:          "1h",
		MaxAge:              3,
		LogLevel:            "debug",
	}
	// 创建动态配置客户端的另一种方式 (推荐)
	configClient, err := clients.NewConfigClient(
		vo.NacosClientParam{
			ClientConfig:  &clientConfig,
			ServerConfigs: serverConfigs,
		},
	)
	if err != nil {
		panic(err)
	}
	//获取配置信息
	//content, err := configClient.GetConfig(vo.ConfigParam{
	//	DataId: "user-web.yaml",
	//	Group:  "dev"})
	//if err != nil {
	//	fmt.Println("GetConfig err: ",err)
	//}
	//监听配置
	err = configClient.ListenConfig(vo.ConfigParam{
		DataId: "user-web.yaml",
		Group:  "dev",
		OnChange: func(namespace, group, dataId, data string) {
			fmt.Println("group:" + group + ", dataId:" + dataId + ", data:" + data)
		},
	})
	if err!=nil{
		return
	}
	time.Sleep(time.Second*1000)
}

结果:

go使用nacos配置中心进行服务组件配置

go使用nacos配置中心进行服务组件配置.

这里因为没用viper 进行本地配置文件的解析.

所以使用的直接是nacos的明文配置.

zhe

func initNacosFrom() {
   serverConfigs := []constant.ServerConfig{ //指定nacos服务地址.配置连接信息
      {
         //IpAddr: Nacos.Host, //这里是指定nacos的服务连接地址
         //Port:   Nacos.Port, //指定端口号
         //
         IpAddr: "192.168.75.6", //这里是指定nacos的服务连接地址
         Port:   8848,           //指定端口号
      },
   }
   clientConfig := constant.ClientConfig{ //配置客户端配置信息.用来做客户端初始化配置.
      TimeoutMs:   5000,                                   //连接超时时间
      NamespaceId: "8774e75a-fbe8-4b29-8194-4e70f482924d", //这里写的是命名空间的地址.用哪个就写哪个,这里用的是dev的命名空间
      //NamespaceId:          , //这里写的是命名空间的地址.用哪个就写哪个,这里用的是dev的命名空间
      CacheDir:             "nacos/cache", //nacos缓存目录
      NotLoadCacheAtStart:  true,          //配置是否在服务启动时直接加载缓存??
      UpdateCacheWhenEmpty: false,         //配置当缓存为空的时候进行主动更新
      LogDir:               "nacos/log",   //日志目录
      LogLevel:             "debug",       //日志级别
   }
   configClient, err := clients.CreateConfigClient(map[string]interface{}{ //根据nacos的地址信息和需要的配置页面信息生成一个客户端.
      "serverConfigs": serverConfigs,
      "clientConfig":  clientConfig,
   })
   if err != nil {
      panic(err)
   }
   content, err := configClient.GetConfig(vo.ConfigParam{ //读取在页面上配置好de相关信息.
      // 这里用的是dev分组中的account_web配置.以后这里的配置可以使用viper进行参数配置.
      DataId: "account_all.json",
      Group:  "dev",
   })
   if err != nil {
      panic(err)
   }
   err = json.Unmarshal([]byte(content), &AppConf)
   if err != nil {
      fmt.Println(err)
      zap.S().Error("反序列化错误")
   }
}

这里声明的方法信息用在初始化配置时使用,按在init函数中。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持好代码网。