Documentation ¶
Overview ¶
Package naming provides:
- subpackage endpoints: an abstraction layer to store and read endpoints information from etcd.
- subpackage resolver: an etcd-backed gRPC resolver for discovering gRPC services based on the endpoints configuration
To use, first import the packages:
import ( "github.com/lfch/etcd-io/client/v3" "github.com/lfch/etcd-io/client/v3/naming/endpoints" "github.com/lfch/etcd-io/client/v3/naming/resolver" "google.golang.org/grpc" )
First, register new endpoint addresses for a service:
func etcdAdd(c *clientv3.Client, service, addr string) error { em := endpoints.NewManager(c, service) return em.AddEndpoint(c.Ctx(), service+"/"+addr, endpoints.Endpoint{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) { etcdResolver, err := resolver.NewBuilder(c); if err { return nil, err } return grpc.Dial("etcd:///" + service, grpc.WithResolvers(etcdResolver)) }
Optionally, force delete an endpoint:
func etcdDelete(c *clientv3, service, addr string) error { em := endpoints.NewManager(c, service) return em.DeleteEndpoint(c.Ctx(), service+"/"+addr) }
Or register an expiring endpoint with a lease:
func etcdAdd(c *clientv3.Client, lid clientv3.LeaseID, service, addr string) error { em := endpoints.NewManager(c, service) return em.AddEndpoint(c.Ctx(), service+"/"+addr, endpoints.Endpoint{Addr:addr}, clientv3.WithLease(lid)); }
Click to show internal directories.
Click to hide internal directories.