etcd: go.etcd.io/etcd/clientv3/naming Index | Files

package naming

import "go.etcd.io/etcd/clientv3/naming"

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

To use, first import the packages:

import (
	"go.etcd.io/etcd/clientv3"
	etcdnaming "go.etcd.io/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

Package Files

doc.go grpc.go

Variables

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

type GRPCResolver Uses

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 Uses

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

func (*GRPCResolver) Update Uses

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

Package naming imports 7 packages (graph) and is imported by 5 packages. Updated 2018-12-13. Refresh now. Tools for package owners.