Help us shape the future of Go! Take the 2026 Go Developer Survey

nacos

package module
v0.1.2 Latest Latest
Warning

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

Go to latest
Published: Nov 2, 2026 License: MIT Imports: 10 Imported by: 0

Documentation

Overview

Package nacos 提供 registry 接口的 Nacos 实现。

本包封装 nacos-sdk-go 的 naming_client 和 config_client, 实现 registry 包定义的 Registrar、Discoverer、Subscriber 和 ConfigStore 接口。

与 ekit/nacos 包的关系

ekit/nacos         SDK 薄封装:Bootstrap 配置、NewNamingClient/NewConfigClient 工厂
ekit/registry      provider 无关的抽象接口
ekit/registry/nacos(本包)  将 SDK client 适配为 registry 接口

典型用法:

本包**的目录名是 nacosimpl,但包名是 nacos**(与 registry/nacos 同名)⇒ import 时必须起别名,否则与 registry/nacos 同时 import 时会「nacos redeclared」。 org 内既有消费方一律按 `nacosimpl "github.com/oekit/registry/nacosimpl"` 引入。

import nacosimpl "github.com/oekit/registry/nacosimpl"

namingClient, _ := nacos.NewNamingClient(cfg)
configClient, _ := nacos.NewConfigClient(cfg)

reg, err := nacosimpl.NewRegistrar(namingClient, nacosimpl.WithRegistrarGroup(cfg.Group))
if err != nil {
    return err
}
disc, err := nacosimpl.NewDiscoverer(namingClient, nacosimpl.WithDiscovererGroup(cfg.Group))
if err != nil {
    return err
}
sub, err := nacosimpl.NewSubscriber(namingClient, nacosimpl.WithSubscriberGroup(cfg.Group))
if err != nil {
    return err
}
store, err := nacosimpl.NewConfigStore(configClient)
if err != nil {
    return err
}

所有实现均满足并发安全要求(底层 SDK client 自身并发安全)。

Index

Constants

This section is empty.

Variables

View Source
var ErrNilClient = errors.New("registry/nacos: client must be non-nil")

ErrNilClient 表示构造时传入了 nil 的 SDK client。

Functions

func GetPodIP

func GetPodIP() string

GetPodIP 获取本机 IP 地址。

优先读取 POD_IP 环境变量(Kubernetes 中通过 downward API 注入), 其次遍历网卡获取第一个非回环 IPv4 地址,最后回退到 127.0.0.1。

用于服务注册时自动探测本机 IP:

ip := nacosimpl.GetPodIP()
reg.Register(ctx, registry.Instance{Service: "my-svc", IP: ip, Port: 8080})

Types

type ConfigStore

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

ConfigStore 实现 registry.ConfigStore 接口,基于 Nacos config client。

从 Nacos 配置中心拉取和监听服务运行时配置(如超时、重试、LB 策略)。

func NewConfigStore

func NewConfigStore(client config_client.IConfigClient) (*ConfigStore, error)

NewConfigStore 创建基于 Nacos 的配置存储。

必须传入非 nil 的 configClient,否则返回 ErrNilClient。

func (*ConfigStore) GetConfig

func (s *ConfigStore) GetConfig(ctx context.Context, dataID, group string) (string, error)

GetConfig 从 Nacos 配置中心拉取指定 dataID 的配置内容。

配置不存在时返回空字符串和 nil error。

func (*ConfigStore) ListenConfig

func (s *ConfigStore) ListenConfig(ctx context.Context, dataID, group string, onChange func(data string)) error

ListenConfig 监听指定 dataID 的配置变更。

当配置内容变化时,回调 onChange 并传入最新内容字符串。

func (*ConfigStore) StopListenConfig

func (s *ConfigStore) StopListenConfig(ctx context.Context, dataID, group string) error

StopListenConfig 停止监听指定 dataID 的配置变更。

type Discoverer

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

Discoverer 实现 registry.Discoverer 接口,基于 Nacos naming client。

只返回健康实例(HealthyOnly=true)。

func NewDiscoverer

func NewDiscoverer(client naming_client.INamingClient, opts ...DiscovererOption) (*Discoverer, error)

NewDiscoverer 创建基于 Nacos 的服务发现器。

必须传入非 nil 的 namingClient,否则返回 ErrNilClient。

func (*Discoverer) Discover

func (d *Discoverer) Discover(ctx context.Context, serviceName string) ([]registry.Instance, error)

Discover 根据服务名称从 Nacos 拉取健康实例列表。

Group 使用 Discoverer 的默认值,Clusters 使用 Discoverer 的默认值。

func (*Discoverer) DiscoverAll

func (d *Discoverer) DiscoverAll(ctx context.Context, serviceName string) ([]registry.Instance, error)

DiscoverAll 根据服务名称从 Nacos 拉取全部实例列表(包括不健康的实例)。

Group 和 Clusters 使用 Discoverer 的默认值。

type DiscovererOption

type DiscovererOption func(*Discoverer)

DiscovererOption 是 Discoverer 的配置选项函数类型。

func WithDiscovererClusters

func WithDiscovererClusters(clusters ...string) DiscovererOption

WithDiscovererClusters 设置发现器查询的集群列表。 默认空(查询所有集群)。

func WithDiscovererGroup

func WithDiscovererGroup(group string) DiscovererOption

WithDiscovererGroup 设置发现器使用的默认服务分组。 默认值 "DEFAULT_GROUP"。

type Registrar

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

Registrar 实现 registry.Registrar 接口,基于 Nacos naming client。

实例以临时模式(Ephemeral=true,心跳维持)注册,适合 AP 场景。 Group 和 Cluster 在构造时指定,作为该 Registrar 所有注册操作的默认值。

func NewRegistrar

func NewRegistrar(client naming_client.INamingClient, opts ...RegistrarOption) (*Registrar, error)

NewRegistrar 创建基于 Nacos 的服务注册器。

必须传入非 nil 的 namingClient,否则返回 ErrNilClient。

func (*Registrar) Deregister

func (r *Registrar) Deregister(ctx context.Context, inst registry.Instance) error

Deregister 从 Nacos 注销服务实例。

inst.Group / inst.Cluster 非空时覆盖 Registrar 默认值。

func (*Registrar) Register

func (r *Registrar) Register(ctx context.Context, inst registry.Instance) error

Register 将服务实例注册到 Nacos。

从 inst 读取 Service、IP、Port、Weight、Metadata。 inst.Group / inst.Cluster 非空时覆盖 Registrar 默认值。

type RegistrarOption

type RegistrarOption func(*Registrar)

RegistrarOption 是 Registrar 的配置选项函数类型。

func WithRegistrarCluster

func WithRegistrarCluster(cluster string) RegistrarOption

WithRegistrarCluster 设置注册器使用的默认集群名称。 默认值空字符串(Nacos SDK 内部使用 "DEFAULT")。

func WithRegistrarGroup

func WithRegistrarGroup(group string) RegistrarOption

WithRegistrarGroup 设置注册器使用的默认服务分组。 默认值 "DEFAULT_GROUP"。

type Subscriber

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

Subscriber 实现 registry.Subscriber 接口,基于 Nacos naming client。

利用 Nacos 的推送机制,当服务实例列表变化时回调注册的 callback。

func NewSubscriber

func NewSubscriber(client naming_client.INamingClient, opts ...SubscriberOption) (*Subscriber, error)

NewSubscriber 创建基于 Nacos 的服务订阅器。

必须传入非 nil 的 namingClient,否则返回 ErrNilClient。

func (*Subscriber) Subscribe

func (s *Subscriber) Subscribe(ctx context.Context, serviceName string, cb func([]registry.Instance)) error

Subscribe 订阅指定服务的实例变更。

当 Nacos 推送实例变更时,将 SDK 的 model.Instance 列表转换为 provider 无关的 registry.Instance 列表后回调 cb。

func (*Subscriber) Unsubscribe

func (s *Subscriber) Unsubscribe(ctx context.Context, serviceName string) error

Unsubscribe 取消订阅指定服务的实例变更。

type SubscriberOption

type SubscriberOption func(*Subscriber)

SubscriberOption 是 Subscriber 的配置选项函数类型。

func WithSubscriberGroup

func WithSubscriberGroup(group string) SubscriberOption

WithSubscriberGroup 设置订阅器使用的默认服务分组。 默认值 "DEFAULT_GROUP"。

Jump to

Keyboard shortcuts

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