nacoscli

package
v1.4.40 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 14, 2026 License: MIT Imports: 16 Imported by: 0

README

nacoscli

Nacos 配置中心客户端,支持配置拉取与服务注册发现。

功能

  • 从 Nacos 配置中心拉取配置(GetConfig / Client.GetConfig
  • 服务注册与发现客户端创建(NewNamingClient
  • 客户端生命周期管理(NewClient + Close
  • Context 超时取消支持
  • 多种认证与连接配置方式

快速开始

方式一:通过 Params 字段直接配置(向后兼容)
package main

import (
	"fmt"
	"github.com/18721889353/sunshine/pkg/nacoscli"
)

func main() {
	params := &nacoscli.Params{
		IPAddr:      "192.168.3.37",
		Port:        8848,
		NamespaceID: "de7b176e-91cd-49a3-ac83-beb725979775",
		Group:       "dev",
		DataID:      "user-srv.yml",
		Format:      "yaml",
	}
	format, data, err := nacoscli.GetConfig(params)
	if err != nil {
		panic(err)
	}
	fmt.Printf("format: %s, data: %s\n", format, string(data))
}
方式二:通过 ClientConfig 和 ServerConfig 选项
package main

import (
	"fmt"
	"os"

	"github.com/nacos-group/nacos-sdk-go/v2/common/constant"
	"github.com/18721889353/sunshine/pkg/nacoscli"
)

func main() {
	params := &nacoscli.Params{
		Group:  "dev",
		DataID: "user-srv.yml",
		Format: "yaml",
	}
	clientConfig := &constant.ClientConfig{
		NamespaceId:         "de7b176e-91cd-49a3-ac83-beb725979775",
		TimeoutMs:           5000,
		NotLoadCacheAtStart: true,
		LogDir:              os.TempDir() + "/nacos/log",
		CacheDir:            os.TempDir() + "/nacos/cache",
	}
	serverConfigs := []constant.ServerConfig{
		{IpAddr: "192.168.3.37", Port: 8848},
	}
	format, data, err := nacoscli.GetConfig(params,
		nacoscli.WithClientConfig(clientConfig),
		nacoscli.WithServerConfigs(serverConfigs),
	)
	if err != nil {
		panic(err)
	}
	fmt.Printf("format: %s, data: %s\n", format, string(data))
}
方式三:通过单字段选项(无需 ClientConfig/ServerConfig)
package main

import (
	"fmt"

	"github.com/18721889353/sunshine/pkg/nacoscli"
)

func main() {
	params := &nacoscli.Params{
		Group:  "dev",
		DataID: "user-srv.yml",
		Format: "yaml",
	}
	format, data, err := nacoscli.GetConfig(params,
		nacoscli.WithIPAddr("192.168.3.37"),
		nacoscli.WithPort(8848),
		nacoscli.WithNamespaceID("de7b176e-91cd-49a3-ac83-beb725979775"),
	)
	if err != nil {
		panic(err)
	}
	fmt.Printf("format: %s, data: %s\n", format, string(data))
}

客户端生命周期管理(推荐)

高频获取配置的场景,建议使用 NewClient 创建客户端,复用连接。

package main

import (
	"context"
	"fmt"
	"time"

	"github.com/18721889353/sunshine/pkg/nacoscli"
)

func main() {
	client, err := nacoscli.NewClient(
		nacoscli.WithIPAddr("192.168.3.37"),
		nacoscli.WithPort(8848),
		nacoscli.WithNamespaceID("de7b176e-91cd-49a3-ac83-beb725979775"),
		nacoscli.WithTimeoutMs(3000),
	)
	if err != nil {
		panic(err)
	}
	defer client.Close()

	params := &nacoscli.Params{
		Group:  "dev",
		DataID: "user-srv.yml",
		Format: "yaml",
	}

	// 支持 context 超时控制
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()

	format, data, err := client.GetConfig(ctx, params)
	if err != nil {
		panic(err)
	}
	fmt.Printf("format: %s, data: %s\n", format, string(data))

	// 可复用同一客户端多次获取不同配置
	params2 := &nacoscli.Params{
		Group:  "prod",
		DataID: "another-srv.yml",
		Format: "yaml",
	}
	format2, data2, err := client.GetConfig(context.Background(), params2)
	if err != nil {
		panic(err)
	}
	fmt.Printf("format: %s, data: %s\n", format2, string(data2))
}

身份认证

package main

import (
	"fmt"

	"github.com/18721889353/sunshine/pkg/nacoscli"
)

func main() {
	params := &nacoscli.Params{
		IPAddr:      "192.168.3.37",
		Port:        8848,
		NamespaceID: "de7b176e-91cd-49a3-ac83-beb725979775",
		Group:       "dev",
		DataID:      "user-srv.yml",
		Format:      "yaml",
	}
	format, data, err := nacoscli.GetConfig(params,
		nacoscli.WithAuth("admin", "password"),
	)
	if err != nil {
		panic(err)
	}
	fmt.Printf("format: %s, data: %s\n", format, string(data))
}

服务注册与发现

package main

import (
	"fmt"

	"github.com/18721889353/sunshine/pkg/nacoscli"
)

func main() {
	namingClient, err := nacoscli.NewNamingClient(
		"192.168.3.37",
		8848,
		"de7b176e-91cd-49a3-ac83-beb725979775",
		nacoscli.WithAuth("admin", "password"),
	)
	if err != nil {
		panic(err)
	}
	_ = namingClient
	// 使用 namingClient 进行服务注册与发现
	// 详见: https://github.com/nacos-group/nacos-sdk-go
}

Option 列表

Option 说明 默认值
WithIPAddr(ip) Nacos 服务器地址 ""
WithPort(port) Nacos 服务器端口 0
WithScheme(scheme) 协议(http/grpc) ""
WithContextPath(path) 上下文路径 ""
WithNamespaceID(id) 命名空间 ID ""
WithTimeoutMs(ms) 请求超时(毫秒) 5000
WithAuth(user, pass) 认证信息 ""
WithClientConfig(cfg) 完整客户端配置(覆盖以上) nil
WithServerConfigs(cfgs) 完整服务器配置(覆盖以上) nil

优先级说明WithClientConfigWithServerConfigs 会覆盖同类别下的所有单字段选项。

Documentation

Overview

Package nacoscli 提供 Nacos 配置中心客户端。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetConfig

func GetConfig(params *Params, opts ...Option) (string, []byte, error)

GetConfig 从 Nacos 配置中心获取配置并返回配置内容与格式。

func NewClient added in v1.4.40

func NewClient(nacosIPAddr string, nacosPort int, nacosNamespaceID string, opts ...Option) (naming_client.INamingClient, error)

NewClient 创建一个 Nacos 服务注册与发现客户端。

参数:

  • nacosIPAddr: Nacos 服务器地址,当 opts 中指定 WithServerConfigs 时被覆盖。
  • nacosPort: Nacos 服务器端口,当 opts 中指定 WithServerConfigs 时被覆盖。
  • nacosNamespaceID: Nacos 命名空间 ID,当 opts 中指定 WithClientConfig 时被覆盖。
  • opts: 连接配置选项,优先级高于前三项参数。

返回值:

  • naming_client.INamingClient: Nacos 服务注册与发现客户端实例。
  • error: 创建客户端过程中的错误。

Types

type Client added in v1.4.40

type Client struct {
	// contains filtered or unexported fields
}

Client 是 Nacos 配置客户端,封装了配置客户端的创建、复用与销毁。

func (*Client) Close added in v1.4.40

func (c *Client) Close() error

Close 关闭 Nacos 配置客户端,释放底层连接资源。

type Option

type Option func(*options)

Option 是一个函数类型,用于设置 Nacos 客户端的选项。

func WithAuth

func WithAuth(username, password string) Option

WithAuth 设置 Nacos 客户端的身份验证信息。

func WithClientConfig

func WithClientConfig(clientConfig *constant.ClientConfig) Option

WithClientConfig 设置 Nacos 客户端的完整配置。 设置后将忽略 WithNamespaceID、WithTimeoutMs、WithAuth 等单字段选项。

func WithContextPath added in v1.4.40

func WithContextPath(contextPath string) Option

WithContextPath 设置 Nacos 上下文路径。

func WithIPAddr added in v1.4.40

func WithIPAddr(ipAddr string) Option

WithIPAddr 设置 Nacos 服务器地址。

func WithNamespaceID added in v1.4.40

func WithNamespaceID(namespaceID string) Option

WithNamespaceID 设置 Nacos 命名空间 ID。

func WithPort added in v1.4.40

func WithPort(port int) Option

WithPort 设置 Nacos 服务器端口。

func WithScheme added in v1.4.40

func WithScheme(scheme string) Option

WithScheme 设置 Nacos 协议,支持 http 或 grpc。

func WithServerConfigs

func WithServerConfigs(serverConfigs []constant.ServerConfig) Option

WithServerConfigs 设置 Nacos 服务器的完整配置列表。 设置后将忽略 WithIPAddr、WithPort、WithScheme、WithContextPath 等单字段选项。

func WithTimeoutMs added in v1.4.40

func WithTimeoutMs(timeoutMs int) Option

WithTimeoutMs 设置 Nacos 客户端请求超时时间(毫秒),默认 5000。

type Params

type Params struct {
	IPAddr      string `yaml:"ipAddr" json:"ipAddr"`           // 服务器地址
	Port        int    `yaml:"port" json:"port"`               // 端口
	Scheme      string `yaml:"scheme" json:"scheme"`           // 协议,http 或 grpc
	ContextPath string `yaml:"contextPath" json:"contextPath"` // 路径
	NamespaceID string `yaml:"namespaceID" json:"namespaceID"` // 命名空间 ID
	Group       string `yaml:"group" json:"group"`             // 分组,例如:dev, prod, test
	DataID      string `yaml:"dataID" json:"dataID"`           // 配置文件 ID
	Format      string `yaml:"format" json:"format"`           // 配置文件类型:json, yaml, toml
}

Params 包含 Nacos 配置的查询参数。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL