protector

package module
v0.0.4 Latest Latest
Warning

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

Go to latest
Published: Feb 20, 2023 License: MIT Imports: 9 Imported by: 0

README

protector

grpc service register & resolver with etcd3

How to use

  1. config

    // default scheme
    protector.Scheme    = "etcd"
    
    // default endpoints
    protector.Endpoints = []string{"0.0.0.0:2379"}
    
    // default ttl
    protector.TTL = 5
    
  2. server

    package main
    
    import (
        "flag"
        "fmt"
        "log"
        "net"
        "time"
    
        "github.com/tiantour/protector"
        "github.com/tiantour/protector/example/hello/pb"
        "golang.org/x/net/context"
        "google.golang.org/grpc"
    )
    
    var (
        srv  = flag.String("srv", "hello_service", "service name")
        port = flag.String("port", ":5000", "listening port")
        host = flag.String("host", "localhost", "register etcd address")
    )
    
    func main() {
        flag.Parse()
    
        lis, err := net.Listen("tcp", *port)
        if err != nil {
            panic(err)
        }
    
        go func() {
            err := protector.Register(*srv, *host, *port)
            if err != nil {
                log.Fatal(err)
            }
        }()
    
        log.Printf("starting hello service at %s", *port)
        s := grpc.NewServer()
        pb.RegisterGreeterServer(s, &server{})
        s.Serve(lis)
    }
    
    // server is used to implement helloworld.GreeterServer.
    type server struct{}
    
    // SayHello implements helloworld.GreeterServer
    func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
        fmt.Printf("%v: Receive is %s\n", time.Now(), in.Name)
        return &pb.HelloReply{Message: "Hello " + in.Name}, nil
    }
    
  3. client

    package main
    
    import (
        "flag"
        "fmt"
        "log"
        "time"
    
        "strconv"
    
        "github.com/tiantour/protector"
        "github.com/tiantour/protector/example/hello/pb"
        "golang.org/x/net/context"
        "google.golang.org/grpc"
        "google.golang.org/grpc/credentials/insecure"
        "google.golang.org/grpc/resolver"
    )
    
    var (
        srv = flag.String("srv", "hello_service", "service name")
    )
    
    func init() {
        b := protector.NewResolver()
        resolver.Register(b)
    }
    
    func main() {
        flag.Parse()
    
        ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
        defer cancel()
    
        // tips, there must be :///, if not
        // it can't make a distinction between different service
        target := fmt.Sprintf("%s:///%s", protector.Scheme, *srv)
    
        conn, err := grpc.DialContext(
            ctx,
            target,
            grpc.WithBlock(),
            grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy":"round_robin"}`),
            grpc.WithTransportCredentials(insecure.NewCredentials()),
        )
        if err != nil {
            log.Fatal("resolver etcd err", err)
        }
        defer conn.Close()
    
        cli := pb.NewGreeterClient(conn)
    
        ticker := time.NewTicker(1 * time.Second)
        for t := range ticker.C {
    
            resp, err := cli.SayHello(context.Background(), &pb.HelloRequest{
                Name: "world " + strconv.Itoa(t.Second()),
            })
            if err == nil {
                fmt.Printf("%v: Reply is %s\n", t, resp.Message)
            } else {
                fmt.Println(err)
            }
        }
    }
    

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	Scheme    = "etcd"
	Endpoints = []string{"0.0.0.0:2379"}
	TTL       = 5
)

Functions

func Register

func Register(service, host, port string) error

Types

type Resolver

type Resolver struct {
	// contains filtered or unexported fields
}

func NewResolver added in v0.0.2

func NewResolver() *Resolver

func (*Resolver) Build added in v0.0.2

func (*Resolver) Close

func (r *Resolver) Close()

func (*Resolver) ResolveNow

func (r *Resolver) ResolveNow(o resolver.ResolveNowOptions)

func (*Resolver) Scheme added in v0.0.2

func (r *Resolver) Scheme() string

Directories

Path Synopsis
example
hello/pb
Package pb is a generated protocol buffer package.
Package pb is a generated protocol buffer package.

Jump to

Keyboard shortcuts

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