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 }