github.com/weedge/lib@v0.0.0-20230424045628-a36dcc1d90e4/client/etcd/cmd/discovery_client/main.go (about)

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"flag"
     6  	"fmt"
     7  	"io"
     8  	"strings"
     9  	"time"
    10  
    11  	"github.com/weedge/lib/client/etcd/cmd/pb"
    12  	"github.com/weedge/lib/client/etcd/discovery"
    13  	"github.com/weedge/lib/log"
    14  
    15  	"google.golang.org/grpc"
    16  	"google.golang.org/grpc/keepalive"
    17  )
    18  
    19  const defaultService = "test-service"
    20  
    21  var kacp = keepalive.ClientParameters{
    22  	Time:                10 * time.Second, // send pings every 10 seconds if there is no activity
    23  	Timeout:             time.Second,      // wait 1 second for ping ack before considering the connection dead
    24  	PermitWithoutStream: true,             // send pings even without active streams
    25  }
    26  
    27  func testService(service string, stream bool) {
    28  	// https://github.com/grpc/grpc-go/blob/master/examples/features/
    29  	conn, err := grpc.Dial(
    30  		fmt.Sprintf("%s:///%s", discovery.Scheme, service),
    31  		grpc.WithBlock(),
    32  		grpc.WithDefaultServiceConfig(`{"loadBalancingPolicy":"round_robin"}`),
    33  		grpc.WithInsecure(),
    34  		grpc.WithKeepaliveParams(kacp))
    35  	if err != nil {
    36  		log.Errorf("did not connect: %v", err)
    37  		return
    38  	}
    39  	defer conn.Close()
    40  	c := pb.NewHelloClient(conn)
    41  
    42  	i := 1
    43  
    44  	for {
    45  		if !stream {
    46  			resp, err := c.Echo(context.Background(), &pb.EchoRequest{Message: fmt.Sprintf("test-%d", i)})
    47  			if err != nil {
    48  				fmt.Println(err)
    49  			} else {
    50  				fmt.Println(resp.Message)
    51  			}
    52  		} else {
    53  			s, err := c.Stream(context.Background(), &pb.EchoRequest{Message: fmt.Sprintf("test-%d", i)})
    54  			if err != nil {
    55  				fmt.Println(err)
    56  			} else {
    57  				for {
    58  					msg, err := s.Recv()
    59  					if err == io.EOF {
    60  						break
    61  					}
    62  
    63  					if err != nil {
    64  						fmt.Println(err)
    65  						break
    66  					}
    67  					fmt.Println(msg.Message)
    68  				}
    69  			}
    70  		}
    71  		i++
    72  		time.Sleep(time.Second)
    73  	}
    74  }
    75  
    76  func main() {
    77  	stream := flag.Bool("stream", false, "If test stream.")
    78  	service := flag.String("service", defaultService, "service name")
    79  	flag.Parse()
    80  
    81  	r := discovery.NewGrpcResolver([]string{"0.0.0.0:2379"}, time.Second*5)
    82  	err := r.InitGrpcResolver()
    83  	if err != nil {
    84  		log.Error(err.Error())
    85  		return
    86  	}
    87  
    88  	tmpArr := strings.Split(*service, ",")
    89  	for _, s := range tmpArr {
    90  		s := s
    91  		go testService(s, *stream)
    92  	}
    93  
    94  	for {
    95  		time.Sleep(time.Second * 5)
    96  		r.DebugStore()
    97  	}
    98  }