package invoke import ( "github.com/sirupsen/logrus" "sync" "google.golang.org/grpc/resolver" ) type Builder struct{} func (b *Builder) Scheme() string { return SCHEME } func (b *Builder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) { cr := &Resolver{ cc: cc, target: target, } cr.ResolveNow(resolver.ResolveNowOptions{}) return cr, nil } type Resolver struct { target resolver.Target cc resolver.ClientConn } func (r *Resolver) ResolveNow(o resolver.ResolveNowOptions) { logrus.Tracef("resolve_v2 ResolveNow => target: %s, %v", r.target.URL.Host, ips) _ = r.cc.UpdateState(ips[r.target.URL.Host]) } func (cr *Resolver) Close() {} var ( locker = &sync.Mutex{} myBuilder = &Builder{} ips = map[string]resolver.State{} )