一. 先介绍一下go操作nacos时的几个库
- "github.com/nacos-group/nacos-sdk-go/vo"包用来定义一些和nacos交互的参数和类型的,例如: 可以使用vo包中的RegisterInstanceParam类型来创建一个注册服务的参数,然后传递给naming_client的RegisterInstance方法
- "nacos-sdk-go/common/constant"包用来定义一些和nacos相关的常量的,例如: 可以使用constant包中的DEFAULT_GROUP常量来表示nacos的默认分组,或者使用constant包中的KEY_USERNAME常量来表示nacos的用户名参数
- "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注册中心交互的
- Nacos官网, 文档
二. go 连接nacos配置中心
- 官方提供的使用demo,配合上面的官方文档中的"Create client for ACM"和"动态配置"部分一块看
- 生产上使用的一个基本示例
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
TraceEnable = "traceEnable"
)
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
}
func ListenConfig(client config_client.IConfigClient, dataID, group string) {
err := client.ListenConfig(vo.ConfigParam{
DataId: dataID,
Group: group,
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注册中心
- 服务发现官方提供的参考demo,结合上面官方提供的文档中的"Create client"和"服务发现"部分一块去看