🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Book a DemoInstallSign in
Socket

github.com/WeilerCode/nacos-sdk-go

Package Overview
Dependencies
Alerts
File Explorer
Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

github.com/WeilerCode/nacos-sdk-go

v0.4.0
Source
Go
Version published
Created
Source

nacos-go

go语言版本的nacos client,支持服务发现和配置管理

客户端配置

  • ClientConfig 客户端配置参数
constant.ClientConfig{
    TimeoutMs:      10 * 1000, //http请求超时时间,单位毫秒
    ListenInterval: 30 * 1000, //监听间隔时间,单位毫秒(仅在ConfigClient中有效)
    BeatInterval:   5 * 1000, //心跳间隔时间,单位毫秒(仅在ServiceClient中有效)
    NamespaceId:       "public", //nacos命名空间
    Endpoint:          "", //获取nacos节点ip的服务地址
    CacheDir:         "/data/nacos/cache", //缓存目录
    LogDir:         "/data/nacos/log", //日志目录
    UpdateThreadNum:   20, //更新服务的线程数
    NotLoadCacheAtStart: true, //在启动时不读取本地缓存数据,true--不读取,false--读取
    UpdateCacheWhenEmpty: true, //当服务列表为空时是否更新本地缓存,true--更新,false--不更新
}
  • ServerConfig nacos服务信息配置参数
constant.ServerConfig{
    IpAddr:      "console.nacos.io", //nacos服务的ip地址 
    ContextPath: "/nacos", //nacos服务的上下文路径,默认是“/nacos” 
    Port:        80, //nacos服务端口
}

注:ServerConfig支持配置多个,在请求出错时,自动切换

构造客户端

// 可以没有,采用默认值
clientConfig := constant.ClientConfig{
    TimeoutMs:      10 * 1000,
    ListenInterval: 30 * 1000,
    BeatInterval:   5 * 1000,
    LogDir: "/nacos/logs",
    CacheDir: "/nacos/cache",
} 

// 至少一个
serverConfigs := []constant.ServerConfig{
    {
        IpAddr:      "console1.nacos.io",
        ContextPath: "/nacos",
        Port:        80,
    },
    {
    	IpAddr:      "console2.nacos.io",
    	ContextPath: "/nacos",
    	Port:        80,
    },
}

namingClient, err := clients.CreateNamingClient(map[string]interface{}{
	"serverConfigs": serverConfigs,
	"clientConfig":  clientConfig,
})

configClient, err := clients.CreateConfigClient(map[string]interface{}{
	"serverConfigs": serverConfigs,
	"clientConfig":  clientConfig,
})
    

服务发现

  • 注册服务实例:RegisterInstance

success, _ := namingClient.RegisterInstance(vo.RegisterInstanceParam{
    Ip:          "10.0.0.11",
    Port:        8848,
    ServiceName: "demo.go",
    Weight:      10,
    ClusterName: "a",
    Enable:      true,
    Healthy:     true,
    Ephemeral:   true,
})

  • 注销服务实例:DeregisterInstance

success, _ := namingClient.DeregisterInstance(vo.RegisterInstanceParam{
    Ip:          "10.0.0.11",
    Port:        8848,
    ServiceName: "demo.go",
    ClusterName: "a",
    Ephemeral:   true,
})

  • 获取服务:GetService

service, _ := namingClient.GetService(vo.GetServiceParam{
    ServiceName: "demo.go",
    Clusters:    []string{"a"},
})

  • 获取所有的实例列表:SelectAllInstances

instances, err := namingClient.SelectAllInstances(vo.SelectAllInstancesParam{
    ServiceName: "demo.go",
    Clusters:    []string{"a"},
})

  • 获取实例列表:SelectInstances

instances, err := namingClient.SelectInstances(vo.SelectInstancesParam{
    ServiceName: "demo.go",
    Clusters:    []string{"a"},
    HealthyOnly: true,
})

  • 获取一个健康的实例(加权轮训负载均衡):SelectOneHealthyInstance

instance, err := namingClient.SelectOneHealthyInstance(vo.SelectOneHealthInstanceParam{
    ServiceName: "demo.go",
    Clusters:    []string{"a"},
})

  • 服务监听:Subscribe

namingClient.Subscribe(vo.SubscribeParam{
    ServiceName: "demo.go",
    Clusters:    []string{"a"},
    SubscribeCallback: func(services []model.SubscribeService, err error) {
        log.Printf("\n\n callback return services:%s \n\n", utils.ToJsonString(services))
    },
})

  • 取消服务监听:Unsubscribe

namingClient.Unsubscribe(vo.SubscribeParam{
    ServiceName: "demo.go",
    Clusters:    []string{"a"},
    SubscribeCallback: func(services []model.SubscribeService, err error) {
        log.Printf("\n\n callback return services:%s \n\n", utils.ToJsonString(services))
    },
})

配置管理

  • 发布配置:PublishConfig

success, err := configClient.PublishConfig(vo.ConfigParam{
    DataId:  "dataId",
    Group:   "group",
    Content: "hello world!222222"})

  • 删除配置:DeleteConfig

success, err = configClient.DeleteConfig(vo.ConfigParam{
    DataId: "dataId",
    Group:  "group"})

  • 获取配置:GetConfig

content, err := configClient.GetConfig(vo.ConfigParam{
    DataId: "dataId",
    Group:  "group"})

  • 监听配置:ListenConfig

configClient.ListenConfig(vo.ConfigParam{
    DataId: "dataId",
    Group:  "group",
    OnChange: func(namespace, group, dataId, data string) {
        fmt.Println("group:" + group + ", dataId:" + dataId + ", data:" + data)
	},
})

FAQs

Package last updated on 12 Jul 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts