go 进阶 三方库之 nacos 配置中心

一. 先介绍一下go操作nacos时的几个库

  1. "github.com/nacos-group/nacos-sdk-go/vo"包用来定义一些和nacos交互的参数和类型的,例如: 可以使用vo包中的RegisterInstanceParam类型来创建一个注册服务的参数,然后传递给naming_client的RegisterInstance方法
  2. "nacos-sdk-go/common/constant"包用来定义一些和nacos相关的常量的,例如: 可以使用constant包中的DEFAULT_GROUP常量来表示nacos的默认分组,或者使用constant包中的KEY_USERNAME常量来表示nacos的用户名参数
  3. "github.com/nacos-group/nacos-sdk-go/clients"包用来创建和使用nacos的客户端的,可以使用这个包中的CreateConfigClient和CreateNamingClient函数来创建一个配置中心或注册中心的客户端,然后使用这个客户端来和nacos服务端进行交互,也就是说nacos-sdk-go/clients包不仅包含了nacos配置中心的客户端,还包含了nacos注册中心的客户端。实际里面有两个子包,分别是config_client和naming_client。config_client是用来和nacos配置中心交互的,naming_client是用来和nacos注册中心交互的
  4. Nacos官网, 文档
    在这里插入图片描述

二. go 连接nacos配置中心

  1. 官方提供的使用demo,配合上面的官方文档中的"Create client for ACM"和"动态配置"部分一块看
  2. 生产上使用的一个基本示例
import (
	"fmt"
	"github.com/Unknwon/goconfig"
	"github.com/nacos-group/nacos-sdk-go/clients"
	"github.com/nacos-group/nacos-sdk-go/clients/config_client"
	"github.com/nacos-group/nacos-sdk-go/common/constant"
	"github.com/nacos-group/nacos-sdk-go/vo"
	"os"
)

var (
	CommonConf *goconfig.ConfigFile
	//_           = GetNacosCommon()
	TraceEnable = "traceEnable"
)

//GetACMInfo 获取ACM信息
func GetNacosCommon() *goconfig.ConfigFile {

	ymlconfig, err := goconfig.LoadConfigFile("/config/common.yml")
	if err != nil {
		fmt.Println("读取本地test环境common")
		ymlconfig, err = goconfig.LoadConfigFile("./config/common-test.yml")
	}
	if err != nil {
		fmt.Println("Application: read yml config  error ")
		os.Exit(0)
	}
	endpoint, _ := ymlconfig.GetValue("acm", "endpoint")
	namespaceID, _ := ymlconfig.GetValue("acm", "namespaceId")
	accessKey, _ := ymlconfig.GetValue("acm", "accessKey")
	secretKey, _ := ymlconfig.GetValue("acm", "secretKey")
	dataID, _ := ymlconfig.GetValue("acm", "dataId")
	group, _ := ymlconfig.GetValue("acm", "group")

	fmt.Println("nacos common dataID:" + dataID)
	fmt.Println("nacos common group:" + group)

	clientConfig := constant.ClientConfig{
		Endpoint:       endpoint + ":8080",
		NamespaceId:    namespaceID,
		AccessKey:      accessKey,
		SecretKey:      secretKey,
		TimeoutMs:      5 * 1000,
		ListenInterval: 30 * 1000,
	}
	fmt.Printf("创建nacos连接对象 clientConfit: %v", clientConfig)

	configClient, err := clients.CreateConfigClient(map[string]interface{}{
		"clientConfig": clientConfig,
	})
	if nil != err {
		fmt.Println("common 连接nacos异常 err:" + err.Error())
	}

	content, err := configClient.GetConfig(vo.ConfigParam{
		DataId: dataID,
		Group:  group})
	if nil != err {
		fmt.Println("读取 nacos common 配置异常 err:" + err.Error())
	}
	fmt.Println("content2:" + content + "/n")

	CommonConf, err = goconfig.LoadFromData([]byte(content))

	ListenConfig(configClient, dataID, group)

	return CommonConf
}

//监听nacos文件变化
func ListenConfig(client config_client.IConfigClient, dataID, group string) {
	err := client.ListenConfig(vo.ConfigParam{
		DataId: dataID,
		Group:  group,
		//当nacos连接的指定文件有修改时,会执行该函数
		OnChange: func(namespace, group, dataId, data string) {
			CommonConf, _ = goconfig.LoadFromData([]byte(data))
			traceFlag, _ := CommonConf.Int("", TraceEnable)
			traceEnable := ConvertTraceStr(traceFlag)
			fmt.Println("pms-mgr 链路追踪:", traceEnable)
		},
	})
	if nil != err {
		fmt.Println("监听nacos配置修改异常 err: ", err.Error())
	}
}

func ConvertTraceStr(flag int) string {
	if flag == 1 {
		return "打开"
	}
	return "关闭"
}

func IsTraceOpen() bool {
	traceFlag, _ := CommonConf.Int("", TraceEnable)
	if traceFlag == 1 {
		return true
	}
	return false
}

三. nacos注册中心

  1. 服务发现官方提供的参考demo,结合上面官方提供的文档中的"Create client"和"服务发现"部分一块去看
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值