package discovery import ( "context" "google.golang.org/grpc/resolver" ) type Registry interface { // Registry server instance Registry(ctx context.Context, server Server) (err error) } type GrpcResolver interface { DialUrl(serviceName string) string // Resolver get grpc dial resolver Resolver() (builder resolver.Builder, err error) } type Resolver interface { // ResolveAll get service all instance ResolveAll(ctx context.Context, serviceName string) (servers []Server, err error) // Watch when service instance change, send current all instances to channel Watch(ctx context.Context, serviceName string) (ch chan []Server, err error) } type Discovery interface { Registry Resolver GrpcResolver } // Server registry format type Server struct { Name string `json:"name"` Addr string `json:"addr"` // 地址 Attrs map[string]string `json:"attrs"` // attributes }