Documentation

Overview

    Package naming provides an etcd-backed gRPC resolver for discovering gRPC services.

    To use, first import the packages:

    import (
    	"github.com/coreos/etcd/clientv3"
    	etcdnaming "github.com/coreos/etcd/clientv3/naming"
    
    	"google.golang.org/grpc"
    	"google.golang.org/grpc/naming"
    )
    

    First, register new endpoint addresses for a service:

    func etcdAdd(c *clientv3.Client, service, addr string) error {
    	r := &etcdnaming.GRPCResolver{Client: c}
    	return r.Update(c.Ctx(), service, naming.Update{Op: naming.Add, Addr: addr})
    }
    

    Dial an RPC service using the etcd gRPC resolver and a gRPC Balancer:

    func etcdDial(c *clientv3.Client, service string) (*grpc.ClientConn, error) {
    	r := &etcdnaming.GRPCResolver{Client: c}
    	b := grpc.RoundRobin(r)
    	return grpc.Dial(service, grpc.WithBalancer(b))
    }
    

    Optionally, force delete an endpoint:

    func etcdDelete(c *clientv3, service, addr string) error {
    	r := &etcdnaming.GRPCResolver{Client: c}
    	return r.Update(c.Ctx(), "my-service", naming.Update{Op: naming.Delete, Addr: "1.2.3.4"})
    }
    

    Or register an expiring endpoint with a lease:

    func etcdLeaseAdd(c *clientv3.Client, lid clientv3.LeaseID, service, addr string) error {
    	r := &etcdnaming.GRPCResolver{Client: c}
    	return r.Update(c.Ctx(), service, naming.Update{Op: naming.Add, Addr: addr}, clientv3.WithLease(lid))
    }
    

    Index

    Constants

    This section is empty.

    Variables

    View Source
    var ErrWatcherClosed = fmt.Errorf("naming: watch closed")

    Functions

    This section is empty.

    Types

    type GRPCResolver

    type GRPCResolver struct {
    	// Client is an initialized etcd client.
    	Client *etcd.Client
    }

      GRPCResolver creates a grpc.Watcher for a target to track its resolution changes.

      func (*GRPCResolver) Resolve

      func (gr *GRPCResolver) Resolve(target string) (naming.Watcher, error)

      func (*GRPCResolver) Update

      func (gr *GRPCResolver) Update(ctx context.Context, target string, nm naming.Update, opts ...etcd.OpOption) (err error)

      Source Files