1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- 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")
- }
|