package main /** 客户端调用 */ import ( "app.yhyue.com/BP/servicerd/proto" "context" "flag" "google.golang.org/grpc" "log" "sync" ) //服务地址配置 var ( rdserver = flag.String("rd", "127.0.0.1:10021", "服务治理地址") ) var client proto.ServiceClient func init() { flag.Parse() conn, err := grpc.Dial(*rdserver, grpc.WithInsecure()) if err != nil { return } client = proto.NewServiceClient(conn) } func run(thread int, wg *sync.WaitGroup) { defer func(wg *sync.WaitGroup) { wg.Done() }(wg) for i := 0; i < 200; i++ { repl, err := client.Apply(context.TODO(), &proto.ApplyReqData{Name: "demo", Balance: 0}) if err != nil { log.Println("出错了") log.Fatalln(err.Error()) } log.Println("结果", thread, repl.Addr, repl.ResourceId) //TODO 业务调用 conn, err := grpc.Dial(repl.Addr, grpc.WithInsecure()) if err != nil { return } defer conn.Close() demo_client := proto.NewDemoServiceClient(conn) demo_repl, err := demo_client.Say(context.TODO(), &proto.DemoReq{ Name: "张三", }) if err != nil { log.Println(err.Error()) } else { log.Println("back::", thread, demo_repl.Data) } //只有使用SEQ负载模式,需要调用释放资源 /* release_repl, err := client.Release(context.TODO(), &proto.StringReqData{Data: repl.ResourceId}) if err != nil { log.Println("出错了") log.Fatalln(err.Error()) } else { log.Println(thread, release_repl.Data) }*/ } } func main() { wg := new(sync.WaitGroup) for i := 0; i < 5; i++ { wg.Add(1) go run(i, wg) } wg.Wait() log.Println("all ok") }