discovclient.go 747 B

123456789101112131415161718192021222324252627282930313233343536
  1. package internal
  2. import (
  3. "zero/core/discov"
  4. "zero/rpcx/internal/balancer/roundrobin"
  5. "zero/rpcx/internal/resolver"
  6. "google.golang.org/grpc"
  7. "google.golang.org/grpc/connectivity"
  8. )
  9. type DiscovClient struct {
  10. conn *grpc.ClientConn
  11. }
  12. func NewDiscovClient(etcd discov.EtcdConf, opts ...ClientOption) (*DiscovClient, error) {
  13. resolver.RegisterResolver(etcd)
  14. opts = append(opts, WithDialOption(grpc.WithBalancerName(roundrobin.Name)))
  15. conn, err := dial("discov:///", opts...)
  16. if err != nil {
  17. return nil, err
  18. }
  19. return &DiscovClient{
  20. conn: conn,
  21. }, nil
  22. }
  23. func (c *DiscovClient) Next() (*grpc.ClientConn, bool) {
  24. state := c.conn.GetState()
  25. if state == connectivity.Ready {
  26. return c.conn, true
  27. } else {
  28. return nil, false
  29. }
  30. }