You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

54 lines
1.1 KiB

package discovery
import (
"context"
"google.golang.org/grpc/resolver"
"strconv"
)
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
}
func (s Server) GetWeight() (weight int) {
weight = 1
if len(s.Attrs) == 0 {
return
}
v, ok := s.Attrs["weight"]
if !ok {
return
}
if w, err := strconv.Atoi(v); err != nil {
weight = w
}
return
}