package grpc_builder
import (
"fmt"
"google.golang.org/grpc/resolver"
)
const customResolverScheme = "custom"
type customResolverBuilder struct {
}
type customResolver struct {
target resolver.Target
cc resolver.ClientConn
}
func (*customResolverBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) {
r := &customResolver{
target: target,
cc: cc,
}
r.start()
return r, nil
}
func (*customResolverBuilder) Scheme() string {
return customResolverScheme
}
func (r customResolver) start() {
addrs := make([]resolver.Address, 0)
for i:=0; i<9; i++ {
addrs = append(addrs, resolver.Address{Addr: "192.168.237.12:9080"})
}
fmt.Println("addrs", addrs)
r.cc.UpdateState(resolver.State{Addresses: addrs})
}
func (*customResolver) ResolveNow(o resolver.ResolveNowOptions) {}
func (*customResolver) Close() {}
func init() {
resolver.Register(&customResolverBuilder{})
}
然后再grpc.Dial时,引入该包即可 import “grpc_builder”