43 lines
829 B
Go
43 lines
829 B
Go
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{}
|
|
) |