directbuilder.go 772 B

1234567891011121314151617181920212223242526272829303132333435
  1. package internal
  2. import (
  3. "strings"
  4. "github.com/zeromicro/go-zero/zrpc/resolver/internal/targets"
  5. "google.golang.org/grpc/resolver"
  6. )
  7. type directBuilder struct{}
  8. func (d *directBuilder) Build(target resolver.Target, cc resolver.ClientConn, _ resolver.BuildOptions) (
  9. resolver.Resolver, error) {
  10. var addrs []resolver.Address
  11. endpoints := strings.FieldsFunc(targets.GetEndpoints(target), func(r rune) bool {
  12. return r == EndpointSepChar
  13. })
  14. for _, val := range subset(endpoints, subsetSize) {
  15. addrs = append(addrs, resolver.Address{
  16. Addr: val,
  17. })
  18. }
  19. if err := cc.UpdateState(resolver.State{
  20. Addresses: addrs,
  21. }); err != nil {
  22. return nil, err
  23. }
  24. return &nopResolver{cc: cc}, nil
  25. }
  26. func (d *directBuilder) Scheme() string {
  27. return DirectScheme
  28. }