registry

package
v2.0.11 Latest Latest
Warning

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

Go to latest
Published: Oct 15, 2026 License: MIT Imports: 11 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type CachedRegistry added in v2.0.4

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

CachedRegistry 是 RegistryClient 的装饰器(decorator)。

解决的核心问题:原实现每次微服务调用(client.CallCtx → selectHostByLB → GetServices) 都会同步打一次注册中心(Nacos /list、etcd Get、Consul Health、Polaris GET), 在高 QPS 下既拖慢单次调用、又给注册中心造成巨大压力,且注册中心抖动会直接击穿到业务调用。

本装饰器在内存中缓存 GetServices 结果:

  • 读取命中缓存(未过期)直接返回,零网络开销;
  • 后台定时预热,保持缓存温热、及时感知实例上下线;
  • 回源失败时优先复用旧实例列表(降级),避免注册中心瞬时故障导致全部调用失败;
  • 并发冷命中通过 inFlight 去重,只回源一次;
  • 进程关闭(DeRegister)时停止后台刷新协程,避免泄漏。

该层对调用方与注册中心后端完全透明,不改变 RegistryClient 接口语义。

func NewCachedRegistry added in v2.0.4

func NewCachedRegistry(inner RegistryClient) *CachedRegistry

NewCachedRegistry 用缓存层包裹一个真实的 RegistryClient。 inner 为 nil 时直接返回 nil(与 NewRegistry 的兜底逻辑保持一致)。

func (*CachedRegistry) DeRegister added in v2.0.4

func (c *CachedRegistry) DeRegister()

DeRegister 停止后台刷新协程,再透传注销。

func (*CachedRegistry) GetServiceURL added in v2.0.4

func (c *CachedRegistry) GetServiceURL(servicename string, groupName ...string) (string, string)

GetServiceURL v1 单实例入口:复用缓存的实例列表,随机选 1 个(保持原语义)。 缓存未命中或回源失败时返回 ("", ""),与原 v1 行为一致。

func (*CachedRegistry) GetServices added in v2.0.4

func (c *CachedRegistry) GetServices(servicename string, groupName ...string) ([]string, error)

GetServices v2 多实例入口:优先返回未过期的缓存; 未命中或已过期时回源,并通过 inFlight 抑制并发惊群; 回源出错但存在旧数据则降级返回旧数据,彻底无数据才返回错误。

func (*CachedRegistry) Register added in v2.0.4

func (c *CachedRegistry) Register(data []byte)

Register / DeRegister 直接透传到内层客户端;DeRegister 额外停止后台刷新。

type RegistryClient

type RegistryClient interface {
	// Register 把本服务注册到配置中心。
	Register(registryConfigData []byte)
	// GetServiceURL v1 单实例返回,保留向后兼容。
	// 内部实现通常从多实例中随机选 1 个返回,与 GetServices 等价。
	GetServiceURL(servicename string, groupName ...string) (string, string)
	// GetServices v2 新增:返回该服务的所有可用实例 URL 列表。
	// 用于客户端负载均衡(pkg/loadbalancer)。
	// 找不到实例时返 (nil, nil),错误时返 (nil, err)。
	GetServices(servicename string, groupName ...string) ([]string, error)
	// DeRegister 注销本服务。
	DeRegister()
}

RegistryClient 是 mgin v2 扩展后的统一注册中心客户端接口。

v1 接口:Register / GetServiceURL / DeRegister(保持不变,存量项目无需改动)。 v2 新增:GetServices 多实例列表,供 client.CallCtx 的负载均衡使用。

var Registry RegistryClient

func NewRegistry

func NewRegistry() RegistryClient

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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