Documentation
¶
Overview ¶
Package etcd 提供 etcd 配置中心实现
Package etcd 基于 etcd 提供注册中心实现。
该包将 etcd 与 go-boot 服务发现和注册中心接口集成, 使用 etcd Lease 机制实现健康检测,支持服务注册、发现和 Watch。
定义:
- EtcdRegistry: 注册中心实现了 center.Registry 接口
- Config: etcd 配置
- Option: 配置选项函数
快速开始:
// 创建 etcd 注册中心
registry, err := etcd.NewEtcdRegistry(
etcd.WithEndpoints("127.0.0.1:2379"),
)
// 注册服务
registry.Register(ctx, center.InstanceInfo{
ServiceName: "my-service",
Host: "127.0.0.1",
Port: 8080,
})
Index ¶
- type Config
- type EtcdConfigCenter
- type EtcdRegistry
- func (r *EtcdRegistry) Deregister(ctx context.Context, info center.InstanceInfo) error
- func (r *EtcdRegistry) Discover(ctx context.Context, serviceName string) ([]center.InstanceInfo, error)
- func (r *EtcdRegistry) Register(ctx context.Context, info center.InstanceInfo) error
- func (r *EtcdRegistry) Watch(ctx context.Context, serviceName string) (<-chan []center.InstanceInfo, error)
- type Option
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct {
Endpoints []string
Prefix string
TTL time.Duration
DialTimeout time.Duration
TLS *tls.Config
Container core.Container
}
Config etcd 注册中心配置。
type EtcdConfigCenter ¶
type EtcdConfigCenter struct {
// contains filtered or unexported fields
}
func NewEtcdConfigCenter ¶
func NewEtcdConfigCenter(cfg *config.ConfigCenterConfig) (*EtcdConfigCenter, error)
func (*EtcdConfigCenter) Load ¶
func (e *EtcdConfigCenter) Load() (config.ConfigData, error)
Load 加载所有配置数据
func (*EtcdConfigCenter) Watch ¶
func (e *EtcdConfigCenter) Watch(key string, callback func(config.ConfigData)) error
Watch 监控配置变更
type EtcdRegistry ¶
type EtcdRegistry struct {
// contains filtered or unexported fields
}
EtcdRegistry 基于 etcd 实现的注册中心。 服务实例信息存储为 JSON 格式的 value,key 为 {prefix}/{serviceName}/{instanceID}。 使用 etcd Lease 机制实现健康检测:注册时创建租约并通过 KeepAlive 续约。
func NewEtcdRegistry ¶
func NewEtcdRegistry(opts ...Option) (*EtcdRegistry, error)
NewEtcdRegistry 创建 etcd 注册中心实例。 支持通过 Option 函数式选项配置 endpoints、前缀、TTL 等参数。
func (*EtcdRegistry) Deregister ¶
func (r *EtcdRegistry) Deregister(ctx context.Context, info center.InstanceInfo) error
Deregister 从 etcd 中删除指定服务实例。 实例被删除后,租约将不再被续约,等待 TTL 过期后自动清理。
func (*EtcdRegistry) Discover ¶
func (r *EtcdRegistry) Discover(ctx context.Context, serviceName string) ([]center.InstanceInfo, error)
Discover 发现指定服务的所有在线实例。 通过前缀查询 {prefix}/{serviceName} 下的所有 key,反序列化得到实例列表。
func (*EtcdRegistry) Register ¶
func (r *EtcdRegistry) Register(ctx context.Context, info center.InstanceInfo) error
Register 向 etcd 注册一个服务实例。 步骤:
- 将实例信息序列化为 JSON
- 创建租约(TTL 由配置决定)
- 将实例数据写入 etcd,绑定租约
- 启动后台 KeepAlive 保持租约有效
KeepAlive 使用的 context 从调用方 context 分离,不受其取消/超时影响, 调用方应通过 Deregister 来注销实例。
func (*EtcdRegistry) Watch ¶
func (r *EtcdRegistry) Watch(ctx context.Context, serviceName string) (<-chan []center.InstanceInfo, error)
Watch 监听指定服务的实例变化。 底层使用 etcd Watch 监听 {prefix}/{serviceName} 前缀下的变化。 每次变化时调用 Discover 获取最新实例列表并发送到返回的 channel。
type Option ¶
type Option func(*Config)
Option etcd 配置的函数式选项。
func WithDialTimeout ¶
WithDialTimeout 设置 etcd 客户端拨号超时时间。