Nacos-sdk-go
Nacos-sdk-go是Nacos的Go语言客户端,它实现了服务发现和动态配置的功能
使用限制
支持Go>=v1.15版本
支持Nacos>2.x版本
安装
安装开源SDK
go get github.com/nacos-group/nacos-sdk-go/v2
快速使用
* ClientConfig
constant.ClientConfig{ TimeoutMs uint64 // 请求Nacos服务端的超时时间,默认是10000ms NamespaceId string // ACM的命名空间Id CacheDir string // 缓存service信息的目录,默认是当前运行目录 UpdateThreadNum int // 监听service变化的并发数,默认20 NotLoadCacheAtStart bool // 在启动的时候不读取缓存在CacheDir的service信息 UpdateCacheWhenEmpty bool // 当service返回的实例列表为空时,不更新缓存,用于推空保护 Username string // Nacos服务端的API鉴权Username Password string // Nacos服务端的API鉴权Password LogDir string // 日志存储路径 RotateTime string // 日志轮转周期,比如:30m, 1h, 24h, 默认是24h MaxAge int64 // 日志最大文件数,默认3 LogLevel string // 日志默认级别,值必须是:debug,info,warn,error,默认值是info}
* ServerConfigconstant.ServerConfig{ ContextPath string // Nacos的ContextPath,默认/nacos,在2.0中不需要设置 IpAddr string // Nacos的服务地址 Port uint64 // Nacos的服务端口 Scheme string // Nacos的服务地址前缀,默认http,在2.0中不需要设置 GrpcPort uint64 // Nacos的 grpc 服务端口, 默认为 服务端口+1000, 不是必填}
我们可以配置多个ServerConfig,客户端会对这些服务端做轮询请求
服务发现
注销实例:DeregisterInstancesuccess, err := namingClient.DeregisterInstance(vo.DeregisterInstanceParam{ Ip: "${ipAddr}", Port: 8848, ServiceName: "demo.go", Ephemeral: true, Cluster: "cluster-a", // 默认值DEFAULT GroupName: "group-a", // 默认值DEFAULT_GROUP})
获取服务信息:GetServiceservices, err := namingClient.GetService(vo.GetServiceParam{ ServiceName: "demo.go", Clusters: []string{"cluster-a"}, // 默认值DEFAULT GroupName: "group-a", // 默认值DEFAULT_GROUP})
获取所有的实例列表:SelectAllInstancesservices, err := namingClient.GetService(vo.GetServiceParam{ ServiceName: "demo.go", Clusters: []string{"DEFAULT"}, // 默认值 GroupName: "group-a", // 默认值DEFAULT_GROUP})
获取实例列表 :SelectInstances// SelectInstances 只返回满足这些条件的实例列表:healthy=${HealthyOnly},enable=true 和weight>0instances, err := namingClient.SelectInstances(vo.SelectInstancesParam{ ServiceName: "demo.go", GroupName: "group-a", // 默认值DEFAULT_GROUP Clusters: []string{"cluster-a"}, // 默认值DEFAULT HealthyOnly: true,})
获取一个健康的实例(加权随机轮询):SelectOneHealthyInstance// SelectOneHealthyInstance将会按加权随机轮询的负载均衡策略返回一个健康的实例// 实例必须满足的条件:health=true,enable=true and weight>0instance, err := namingClient.SelectOneHealthyInstance(vo.SelectOneHealthInstanceParam{ ServiceName: "demo.go", GroupName: "group-a", // 默认值DEFAULT_GROUP Clusters: []string{"cluster-a"}, // 默认值DEFAULT})
监听服务变化:Subscribe// Subscribe key=serviceName+groupName+cluster// 注意:我们可以在相同的key添加多个SubscribeCallback.err := namingClient.Subscribe(vo.SubscribeParam{ ServiceName: "rcc-demo", GroupName: "DEFAULT_GROUP", // 默认值DEFAULT_GROUP Clusters: []string{"cluster-a"}, // 默认值DEFAULT SubscribeCallback: func(services []model.Instance, err error) { log.Printf("\n\n callback return services:%s \n\n", utils.ToJsonString(services)) },})