package clientImpl import ( "../constants" "google.golang.org/grpc/resolver" ) // resolver工厂实现类 type ExampleResolverBuilder struct{} func (*ExampleResolverBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error) { r := &exampleResolver{ target: target, cc: cc, addressStore: map[string][]string{ constants.ExampleServiceName: constants.ExampleEndpoints, // 服务命名与实际服务终结点列表的对应关系 "go-example": ["localhost:50051", "localhost:50052"] }, } r.start() return r, nil } func (*ExampleResolverBuilder) Scheme() string { return constants.ExampleScheme } // "grpc" // resolver实现类 type exampleResolver struct { target resolver.Target cc resolver.ClientConn addressStore map[string][]string } func (r *exampleResolver) start() { addrList := r.addressStore[r.target.Endpoint] addresses := make([]resolver.Address, len(addrList)) for i, s := range addrList { addresses[i] = resolver.Address{Addr: s} } r.cc.UpdateState(resolver.State{Addresses: addresses}) } func (*exampleResolver) ResolveNow(resolver.ResolveNowOptions) {} func (*exampleResolver) Close() {}