Documentation
¶
Overview ¶
Package etcdx 提供 etcd 客户端全家——客户端封装(根包)、注册发现实现 (registry,实现 github.com/oekit/registry/registry SPI)、分布式锁 (distlock,与 redisx/distlock.Locker 接口形态一致可互换)。
零可观测性副作用:不自动注入任何 tracing/logger 后端,SDK 内部统一 logx.Delegating("etcdx") 懒解析。
快速接入 ¶
client, err := etcdx.NewClient(&clientv3.Config{
Endpoints: []string{"127.0.0.1:2379"},
})
注册发现(SPI 对接 nns/registry 链路):
reg := registry.NewRegistrar(client.Client(), registry.WithPrefix("/myapp"))
_ = reg.Register(ctx, regcore.Instance{Service: "user", IP: "10.0.0.1", Port: 8080})
分布式锁:
locker := distlock.NewEtcdLocker(client.Client(), distlock.WithPrefix("myapp"))
err := distlock.WithLock(ctx, locker, "deploy:myapp", 30*time.Second, 10*time.Second, func() error {
return doDeploy()
})
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Client ¶
Client 是 etcd 客户端封装:内嵌 *clientv3.Client 透传 KV/Lease/Watch 等 全部原生命令,另加 Close(ctx) 幂等关停与 Health 健康探针。 零可观测性副作用:需要 tracing 时用装饰器显式接入。
func NewClient ¶
NewClient 从 clientv3.Config 创建客户端。
生产默认值(调用方显式设置的字段不覆盖):DialTimeout 5s 收紧故障感知 窗口;AutoSyncInterval/MaxCallSendMsgSize 等其余字段交给 etcd 默认值。 Endpoints 为空显式报错(静默连本地 2379 是事故源)。
func NewClientFromConfig ¶
func NewClientFromConfig(ctx context.Context, cfg EtcdConfig) (*Client, error)
NewClientFromConfig 从配置创建客户端(构造后立即 Health 验证连通性)。
用法:
client, err := etcdx.NewClientFromConfig(ctx, etcdx.EtcdConfig{
Endpoints: []string{"127.0.0.1:2379"},
})
type EtcdConfig ¶
type EtcdConfig struct {
// Endpoints 是 etcd 集群地址列表(至少一项)。
Endpoints []string `yaml:"endpoints"`
// Username/Password 用于 etcd 认证(可选)。
Username string `yaml:"username"`
Password string `yaml:"password"`
// DialTimeout 拨号超时;0 时取默认 5s。
DialTimeout time.Duration `yaml:"dialTimeout"`
}
EtcdConfig 是 etcd 连接配置,可直接从 YAML 反序列化。
Directories
¶
| Path | Synopsis |
|---|---|
|
Package distlock 提供基于 etcd 的分布式锁,接口形态与 github.com/oekit/redisx/distlock.Locker 完全一致(TryLock/Lock/Unlock + ownerID 语义),Go 结构化类型下两种后端可直接互换,业务代码面向 Locker 接口编程即可。
|
Package distlock 提供基于 etcd 的分布式锁,接口形态与 github.com/oekit/redisx/distlock.Locker 完全一致(TryLock/Lock/Unlock + ownerID 语义),Go 结构化类型下两种后端可直接互换,业务代码面向 Locker 接口编程即可。 |
|
internal
|
|
|
testutil
Package testutil 提供进程内嵌 etcd 服务端(embed),供各包单元测试使用, 不进入公共 API(internal)。
|
Package testutil 提供进程内嵌 etcd 服务端(embed),供各包单元测试使用, 不进入公共 API(internal)。 |
|
Package registry 是 github.com/oekit/registry/registry SPI 的 etcd 实现: Registrar(Lease + KeepAlive 注册,租约丢失自动重注册)、Discoverer (prefix 拉取)、Subscriber(prefix Watch 推送)、ConfigStore(KV Watch 配置监听)。
|
Package registry 是 github.com/oekit/registry/registry SPI 的 etcd 实现: Registrar(Lease + KeepAlive 注册,租约丢失自动重注册)、Discoverer (prefix 拉取)、Subscriber(prefix Watch 推送)、ConfigStore(KV Watch 配置监听)。 |