discovery

package module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 27, 2020 License: BSD-2-Clause Imports: 2 Imported by: 0

README

discovery

simple naming and resolver service for grpc, support etcd and redis.

Usage

1. Redis

Server

package main

import (
	"context"
	"github.com/golang/protobuf/ptypes/empty"
	"github.com/whatvn/discovery/example/protobuf"
	"github.com/whatvn/discovery/redis"
	"google.golang.org/grpc"
	"net"
)

type Hello struct{}

func (s *Hello) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) {

	response := &pb.HelloResponse{
		Reply: "hi",
	}
	return response, nil
}


func (s *Hello) SayHelloAnonymous(ctx context.Context, in *empty.Empty) (*pb.HelloResponse, error) {

	response := &pb.HelloResponse{
		Reply: "hoho",
	}
	return response, nil
}
func main()  {
	addr := "127.0.0.1:8080"
	registry := redis.New("127.0.0.1:6379", "","hello.svc")
	if err := registry.Register(addr, 5); err != nil {
		panic(err)
	}
	listener, err := net.Listen("tcp", addr)

	if err != nil {
		panic(err)
	}
	server := grpc.NewServer()
	pb.RegisterHelloServiceServer(server, new(Hello))
	server.Serve(listener)
}

Client
package main

import (
	"context"
	"fmt"
	"github.com/golang/protobuf/ptypes/empty"
	"github.com/whatvn/discovery"
	pb "github.com/whatvn/discovery/example/protobuf"
	"github.com/whatvn/discovery/redis"
	"google.golang.org/grpc"
)

func main() {
	registry := redis.NewResolver("127.0.0.1:6379", "", "hello.svc")
	conn, err := grpc.Dial(registry.SvcName(), discovery.DefaultBalancePolicy(), grpc.WithInsecure())
	if err != nil {
		panic(err)
	}
	client := pb.NewHelloServiceClient(conn)
	response, err := client.SayHelloAnonymous(context.Background(), &empty.Empty{})
	fmt.Println(response, err)
}

2. Etcd

Server
package main

import (
	"context"
	"github.com/golang/protobuf/ptypes/empty"
	"github.com/whatvn/discovery/etcd"
	"github.com/whatvn/discovery/example/protobuf"
	"google.golang.org/grpc"
	"net"
)

type Hello struct{}

func (s *Hello) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) {

	response := &pb.HelloResponse{
		Reply: "hi",
	}
	return response, nil
}


func (s *Hello) SayHelloAnonymous(ctx context.Context, in *empty.Empty) (*pb.HelloResponse, error) {

	response := &pb.HelloResponse{
		Reply: "hoho",
	}
	return response, nil
}
func main()  {
	addr := "127.0.0.1:8080"
	registry := etcd.New("10.109.3.93:7379", "hello.svc")
	if err := registry.Register(addr, 5); err != nil {
		panic(err)
	}
	listener, err := net.Listen("tcp", addr)

	if err != nil {
		panic(err)
	}
	server := grpc.NewServer()
	pb.RegisterHelloServiceServer(server, new(Hello))
	server.Serve(listener)
}

Client
package main

import (
	"context"
	"fmt"
	"github.com/golang/protobuf/ptypes/empty"
	"github.com/whatvn/discovery"
	"github.com/whatvn/discovery/etcd"
	pb "github.com/whatvn/discovery/example/protobuf"
	"google.golang.org/grpc"
)

func main() {
	registry := etcd.NewResolver("10.109.3.93:7379", "hello.svc")
	conn, err := grpc.Dial(registry.SvcName(), discovery.DefaultBalancePolicy(), grpc.WithInsecure())
	if err != nil {
		panic(err)
	}
	client := pb.NewHelloServiceClient(conn)
	response, err := client.SayHelloAnonymous(context.Background(), &empty.Empty{})
	fmt.Println(response, err)
}

if you like this project, you may also like denny, this is extracted from denny

Documentation

Index

Constants

View Source
const (
	// PREFIX uses here to differentiate between denny etcd prefix and other service prefix
	// in etcd directory/files
	Prefix = "_DENNY_"
)

Variables

This section is empty.

Functions

func DefaultBalancePolicy

func DefaultBalancePolicy() grpc.DialOption

DefaultBalancePolicy returns default grpc service config which required by new grpc API so client does not have to supply json config everytime

func Exist

func Exist(l []resolver.Address, addr string) bool

func Remove

func Remove(s []resolver.Address, addr string) ([]resolver.Address, bool)

Types

type Registry

type Registry interface {
	Register(addr string, ttl int) error
	UnRegister(addr string) error
	Build(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions) (resolver.Resolver, error)
	Scheme() string
	SvcName() string
}

Registry is based interface, which is composed of grpc resolver.Builder, resolver.Resolver and also contains method to register and unregister from naming storage

Directories

Path Synopsis
example

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL