Documentation
¶
Index ¶
- func BuildConsulTarget(serviceName string) string
- func BuildTarget(scheme, serviceName string) string
- func NewGRPCResolverBuilder(discovery Discovery) resolver.Builder
- func NewGRPCResolverBuilderWithScheme(scheme string, discovery Discovery) resolver.Builder
- func RegisterConsulResolver(discovery Discovery)
- type Discovery
- type K8sRegistry
- func (r *K8sRegistry) Close() error
- func (r *K8sRegistry) GetService(ctx context.Context, serviceName string) ([]*core.ServiceNode, error)
- func (r *K8sRegistry) Register(ctx context.Context, node *core.ServiceNode) error
- func (r *K8sRegistry) Unregister(ctx context.Context, node *core.ServiceNode) error
- func (r *K8sRegistry) Watch(ctx context.Context, serviceName string) (<-chan []*core.ServiceNode, error)
- type Registrar
- type Registry
- func (c *Registry) GetService(ctx context.Context, serviceName string) ([]*core.ServiceNode, error)
- func (c *Registry) Register(ctx context.Context, node *core.ServiceNode) error
- func (c *Registry) Unregister(ctx context.Context, node *core.ServiceNode) error
- func (c *Registry) Watch(ctx context.Context, serviceName string) (<-chan []*core.ServiceNode, error)
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func BuildConsulTarget ¶
BuildConsulTarget 构建 Consul 目标地址。
func BuildTarget ¶ added in v0.2.0
BuildTarget 构建指定 resolver scheme 的目标地址。
func NewGRPCResolverBuilder ¶
NewGRPCResolverBuilder 创建 gRPC 解析器构建器。
func NewGRPCResolverBuilderWithScheme ¶ added in v0.2.0
NewGRPCResolverBuilderWithScheme 创建指定 scheme 的 gRPC 解析器构建器。
func RegisterConsulResolver ¶
func RegisterConsulResolver(discovery Discovery)
RegisterConsulResolver 注册 Consul 解析器。
Types ¶
type Discovery ¶
type Discovery interface {
GetService(ctx context.Context, serviceName string) ([]*core.ServiceNode, error) // 获取服务实例
Watch(ctx context.Context, serviceName string) (<-chan []*core.ServiceNode, error) // 监控服务变化
}
Discovery 服务发现接口
Example ¶
ExampleDiscovery 客户端示例:使用 Discovery 接口发现服务
registry, err := NewConsulRegistry("127.0.0.1:8500")
if err != nil {
log.Fatalf("Failed to create registry: %v", err)
}
RegisterConsulResolver(registry)
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
services, err := registry.GetService(ctx, "hello-service")
if err != nil {
log.Printf("Failed to get services: %v", err)
return
}
for _, svc := range services {
fmt.Printf("ID: %s, Version: %s, Endpoints: %v\n", svc.ID, svc.Version, svc.Endpoints())
}
type K8sRegistry ¶
type K8sRegistry struct {
// contains filtered or unexported fields
}
K8sRegistry 基于 Kubernetes Endpoints 实现服务发现。 在 K8s 环境中,服务的注册由 Kubernetes 本身(Deployment+Service)完成, 因此 Register/Unregister 是空操作。 发现逻辑通过 Endpoints 资源实现。
func NewK8sRegistry ¶
func NewK8sRegistry(namespace string) (*K8sRegistry, error)
NewK8sRegistry 创建 K8s 服务发现实例。 优先使用 InClusterConfig,回退到本地 kubeconfig。
func (*K8sRegistry) GetService ¶
func (r *K8sRegistry) GetService(ctx context.Context, serviceName string) ([]*core.ServiceNode, error)
GetService 从 K8s Endpoints 获取服务实例列表。
func (*K8sRegistry) Register ¶
func (r *K8sRegistry) Register(ctx context.Context, node *core.ServiceNode) error
Register 在 K8s 中是空操作(由 K8s 平台自身完成注册)。
func (*K8sRegistry) Unregister ¶
func (r *K8sRegistry) Unregister(ctx context.Context, node *core.ServiceNode) error
Unregister 在 K8s 中是空操作。
func (*K8sRegistry) Watch ¶
func (r *K8sRegistry) Watch(ctx context.Context, serviceName string) (<-chan []*core.ServiceNode, error)
Watch 监控服务实例变化,返回变化通道。 当 context 取消时,informer 停止并关闭通道。 informers factory 仅在首次 Watch 时启动(通过 startOnce 保证)。
type Registrar ¶
type Registrar interface {
Register(ctx context.Context, node *core.ServiceNode) error // 注册
Unregister(ctx context.Context, node *core.ServiceNode) error // 注销
}
Registrar 服务注册接口
Example ¶
ExampleRegistrar 服务端示例:从配置构建 ServiceNode,注册到 Consul
registry, err := NewConsulRegistry("127.0.0.1:8500")
if err != nil {
log.Fatalf("Failed to create registry: %v", err)
}
// 从配置构建 ServiceNode(一个实例可以包含多个 Transport)
node := core.NewServiceNode(
"hello-service", "v1.0.0",
core.Transport{Protocol: "grpc", Address: "127.0.0.1", Port: 18001},
)
ctx := context.Background()
if err := registry.Register(ctx, node); err != nil {
log.Fatalf("Failed to register: %v", err)
}
defer func() { _ = registry.Unregister(ctx, node) }()
// 启动 gRPC 服务...
fmt.Println("registered:", node.ID)
type Registry ¶
type Registry struct {
// contains filtered or unexported fields
}
Registry 瀹炵幇浜?Registrar 鍜?Discovery 鎺ュ彛
func NewConsulRegistry ¶
NewConsulRegistry 鍒涘缓涓€涓柊鐨?Consul 娉ㄥ唽涓績瀹炰緥
func (*Registry) GetService ¶
GetService 浠?Consul 鑾峰彇鏈嶅姟瀹炰緥鍒楄〃
func (*Registry) Register ¶
Register 娉ㄥ唽鏈嶅姟鍒?Consul銆?// 涓€涓?ServiceNode 鍙兘鍖呭惈澶氫釜 Transport锛堝鍚屾椂鏆撮湶 HTTP 鍜?gRPC锛夛紝 姣忎釜 Transport 娉ㄥ唽涓轰竴鏉$嫭绔嬬殑 Consul 鏈嶅姟璁板綍锛孖D 浠?transport 鍚庣紑鍖哄垎銆?
func (*Registry) Unregister ¶
Unregister 浠?Consul 娉ㄩ攢鏈嶅姟鐨勬墍鏈?Transport 璁板綍