文章目录
- 结构体中IpAddres 可以配置多个地址 package utils import ( “github.com/nacos-group/nacos-sdk-go/clients/config_client” “github.com/nacos-group/nacos-sdk-go/clients/naming_client” “github.com/nacos-group/nacos-sdk-go/vo” “time” ) type NacosConfigClient struct { //ConfigInput //”ip1,ip2,ip3″ IpAddrs string Port int NaocesNameSpace string DataId string Group string NacosLogDir string NacosCacheDir string //NamingInput NamingServiceName string NamingServiceIP string NamingOwner string NamingPort int //Output ConfigClient config_client.IConfigClient NamingClient naming_client.INamingClient }
- type OptionNacos func(msg *NacosConfigClient) //config naming func OptionNacosConfigWithServiceName(serviceName string) OptionNacos { return func(msg *NacosConfigClient) { msg.NamingServiceName = serviceName } } func OptionNacosConfigWithServiceIP(serviceIP string) OptionNacos { return func(msg *NacosConfigClient) { msg.NamingServiceIP = serviceIP } } func OptionNacosConfigWithOwner(owner string) OptionNacos { return func(msg *NacosConfigClient) { msg.NamingOwner = owner } } //config client func OptionNacosConfigWithLogDir(logDir string) OptionNacos { return func(msg *NacosConfigClient) { msg.NacosLogDir = logDir } } func OptionNacosConfigWithCacheDir(cacheDir string) OptionNacos { return func(msg *NacosConfigClient) { msg.NacosCacheDir = cacheDir } } func OptionNacosConfigWithIpaddr(ipAddrr string) OptionNacos { return func(msg *NacosConfigClient) { msg.IpAddrs = ipAddrr } } func OptionNacosConfigWithNameSpace(nameSpace string) OptionNacos { return func(msg *NacosConfigClient) { msg.NaocesNameSpace = nameSpace } } func OptionNacosConfigWithPort(port int) OptionNacos { return func(msg *NacosConfigClient) { msg.Port = port } } func OptionNacosConfigDataId(dataId string) OptionNacos { return func(msg *NacosConfigClient) { msg.DataId = dataId } } func OptionNacosConfigGroup(group string) OptionNacos { return func(msg *NacosConfigClient) { msg.Group = group } } func OptionNacosWithNamingPort(port int) OptionNacos { return func(msg *NacosConfigClient) { msg.NamingPort = port } }
- func NewNacosClient(ops …OptionNacos) *NacosConfigClient{ nacosConfigClient := new(NacosConfigClient) for _, o := range ops { o(nacosConfigClient) } serverConfigs:=make([]constant.ServerConfig,0) address:=strings.Split(nacosConfigClient.IpAddrs,”,”) for i:=range address{ serverConfigs=append(serverConfigs,constant.ServerConfig{ IpAddr: address[i], Port: uint64(nacosConfigClient.Port), }) } clientConfig := constant.ClientConfig{ NamespaceId: nacosConfigClient.NaocesNameSpace, // NotLoadCacheAtStart: false, TimeoutMs: 5 * 1000, LogDir: nacosConfigClient.NacosLogDir, CacheDir: nacosConfigClient.NacosCacheDir, } configClient, err := clients.NewConfigClient( vo.NacosClientParam{ ClientConfig: &clientConfig, ServerConfigs: serverConfigs, }, ) if err != nil { panic(err) } nacosConfigClient.ConfigClient = configClient // Naming client namingClient, err := clients.NewNamingClient( vo.NacosClientParam{ ClientConfig: &clientConfig, ServerConfigs: serverConfigs, }, ) if err != nil { panic(err) } nacosConfigClient.NamingClient = namingClient return nacosConfigClient }
- func (client *NacosConfigClient) GetConfig() (string, error) { content, err := client.ConfigClient.GetConfig(vo.ConfigParam{ DataId: client.DataId, Group: client.Group, }) return content, err }
- func (client *NacosConfigClient) Register() (bool, error) { param := vo.RegisterInstanceParam{ Ip: client.NamingServiceIP, Port: uint64(client.NamingPort), ServiceName: client.NamingServiceName, Weight: 10, Enable: true, Healthy: true, Ephemeral: true, Metadata: map[string]string{“owenr”: client.NamingOwner, “uptime”: time.Now().Format(“2006-01-02 15:04:05”)}, } success, err := client.NamingClient.RegisterInstance(param) return success, err }
- func InitConfig() { config = viper.New() config.SetConfigType(“yaml”) config.ReadConfig(bytes.NewReader([]byte(GetNacosConfig()))) } func GetNacosConfig() string { content,err:=GetNacosClient().GetConfig() if err!=nil{ panic(err) } return content } 这样就可以进行vipper正常操作了
目录
- golang nacos获取配置和服务注册-支持集群
- 初始化客户端
- 可选参数配置
- new一个客户端 支持集群配置
- 获取配置信息
- 服务注册
- 获取配置后如何和项目中的vipper如何无缝对接?
- 总结
结构体中IpAddres 可以配置多个地址
package utils
import (
"github.com/nacos-group/nacos-sdk-go/clients/config_client"
"github.com/nacos-group/nacos-sdk-go/clients/naming_client"
"github.com/nacos-group/nacos-sdk-go/vo"
"time"
)
type NacosConfigClient struct {
//ConfigInput
//"ip1,ip2,ip3"
IpAddrs string
Port int
NaocesNameSpace string
DataId string
Group string
NacosLogDir string
NacosCacheDir string
//NamingInput
NamingServiceName string
NamingServiceIP string
NamingOwner string
NamingPort int
//Output
ConfigClient config_client.IConfigClient
NamingClient naming_client.INamingClient
}
type OptionNacos func(msg *NacosConfigClient)
//config naming
func OptionNacosConfigWithServiceName(serviceName string) OptionNacos {
return func(msg *NacosConfigClient) {
msg.NamingServiceName = serviceName
}
}
func OptionNacosConfigWithServiceIP(serviceIP string) OptionNacos {
return func(msg *NacosConfigClient) {
msg.NamingServiceIP = serviceIP
}
}
func OptionNacosConfigWithOwner(owner string) OptionNacos {
return func(msg *NacosConfigClient) {
msg.NamingOwner = owner
}
}
//config client
func OptionNacosConfigWithLogDir(logDir string) OptionNacos {
return func(msg *NacosConfigClient) {
msg.NacosLogDir = logDir
}
}
func OptionNacosConfigWithCacheDir(cacheDir string) OptionNacos {
return func(msg *NacosConfigClient) {
msg.NacosCacheDir = cacheDir
}
}
func OptionNacosConfigWithIpaddr(ipAddrr string) OptionNacos {
return func(msg *NacosConfigClient) {
msg.IpAddrs = ipAddrr
}
}
func OptionNacosConfigWithNameSpace(nameSpace string) OptionNacos {
return func(msg *NacosConfigClient) {
msg.NaocesNameSpace = nameSpace
}
}
func OptionNacosConfigWithPort(port int) OptionNacos {
return func(msg *NacosConfigClient) {
msg.Port = port
}
}
func OptionNacosConfigDataId(dataId string) OptionNacos {
return func(msg *NacosConfigClient) {
msg.DataId = dataId
}
}
func OptionNacosConfigGroup(group string) OptionNacos {
return func(msg *NacosConfigClient) {
msg.Group = group
}
}
func OptionNacosWithNamingPort(port int) OptionNacos {
return func(msg *NacosConfigClient) {
msg.NamingPort = port
}
}
func NewNacosClient(ops ...OptionNacos) *NacosConfigClient{
nacosConfigClient := new(NacosConfigClient)
for _, o := range ops {
o(nacosConfigClient)
}
serverConfigs:=make([]constant.ServerConfig,0)
address:=strings.Split(nacosConfigClient.IpAddrs,",")
for i:=range address{
serverConfigs=append(serverConfigs,constant.ServerConfig{
IpAddr: address[i],
Port: uint64(nacosConfigClient.Port),
})
}
clientConfig := constant.ClientConfig{
NamespaceId: nacosConfigClient.NaocesNameSpace, //
NotLoadCacheAtStart: false,
TimeoutMs: 5 * 1000,
LogDir: nacosConfigClient.NacosLogDir,
CacheDir: nacosConfigClient.NacosCacheDir,
}
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &clientConfig,
ServerConfigs: serverConfigs,
},
)
if err != nil {
panic(err)
}
nacosConfigClient.ConfigClient = configClient
// Naming client
namingClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &clientConfig,
ServerConfigs: serverConfigs,
},
)
if err != nil {
panic(err)
}
nacosConfigClient.NamingClient = namingClient
return nacosConfigClient
}
func (client *NacosConfigClient) GetConfig() (string, error) {
content, err := client.ConfigClient.GetConfig(vo.ConfigParam{
DataId: client.DataId,
Group: client.Group,
})
return content, err
}
func (client *NacosConfigClient) Register() (bool, error) {
param := vo.RegisterInstanceParam{
Ip: client.NamingServiceIP,
Port: uint64(client.NamingPort),
ServiceName: client.NamingServiceName,
Weight: 10,
Enable: true,
Healthy: true,
Ephemeral: true,
Metadata: map[string]string{"owenr": client.NamingOwner, "uptime": time.Now().Format("2006-01-02 15:04:05")},
}
success, err := client.NamingClient.RegisterInstance(param)
return success, err
}
func InitConfig() {
config = viper.New()
config.SetConfigType("yaml")
config.ReadConfig(bytes.NewReader([]byte(GetNacosConfig())))
}
func GetNacosConfig() string {
content,err:=GetNacosClient().GetConfig()
if err!=nil{
panic(err)
}
return content
}
这样就可以进行vipper正常操作了
以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。
您可能感兴趣的文章:
- Golang基于泛化调用与Nacos实现Dubbo代理
- 详解golang consul-grpc 服务注册与发现