package discovery import ( "context" "sig-pub/pkg/zlog" "strconv" "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"` // 地址 NodeId int `json:"nodeId"` Attrs map[string]string `json:"attrs"` // attributes } func (s Server) GetWeight() (weight int) { weight = 1 if len(s.Attrs) == 0 { return } v, ok := s.Attrs["weight"] if !ok { return } w, err := strconv.Atoi(v) if err != nil { zlog.Warning("failed parse discovery server attr weight: ", v) return } weight = w return }