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", "服务治理地址") balancetype = flag.Int("balance", 0, "负载策略 0=随机 1=服务器压力均衡 2=轮训占用") threads = flag.Int("threads", 20, "压力并发数") requests = flag.Int("reqs", 100, "单个线程服务请求次数") ) func init() { flag.Parse() } func run(thread int, wg *sync.WaitGroup) { conn, err := grpc.Dial(*rdserver, grpc.WithInsecure()) if err != nil { return } defer func(wg *sync.WaitGroup) { conn.Close() wg.Done() }(wg) var client proto.ServiceClient client = proto.NewServiceClient(conn) for i := 0; i < *requests; i++ { repl, err := client.Apply(context.Background(), &proto.ApplyReqData{Name: "demo", Balance: int32(*balancetype)}) 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.Background(), &proto.DemoReq{ Name: "张三", }) if err != nil { log.Println(err.Error()) } else { log.Println("back::", thread, demo_repl.Data) } //time.Sleep(time.Duration(rand.Intn(5)) * time.Second) //只有使用SEQ负载模式,需要调用释放资源 release_repl, err := client.Release(context.Background(), &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 < *threads; i++ { wg.Add(1) go run(i, wg) } wg.Wait() log.Println("all ok") }