main.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package main
  2. /**
  3. 客户端调用
  4. */
  5. import (
  6. "app.yhyue.com/BP/servicerd/proto"
  7. "context"
  8. "flag"
  9. "google.golang.org/grpc"
  10. "log"
  11. "sync"
  12. )
  13. //服务地址配置
  14. var (
  15. rdserver = flag.String("rd", "127.0.0.1:10021", "服务治理地址")
  16. balancetype = flag.Int("balance", 0, "负载策略 0=随机 1=服务器压力均衡 2=轮训占用")
  17. threads = flag.Int("threads", 20, "压力并发数")
  18. requests = flag.Int("reqs", 100, "单个线程服务请求次数")
  19. )
  20. func init() {
  21. flag.Parse()
  22. }
  23. func run(thread int, wg *sync.WaitGroup) {
  24. conn, err := grpc.Dial(*rdserver, grpc.WithInsecure())
  25. if err != nil {
  26. return
  27. }
  28. defer func(wg *sync.WaitGroup) {
  29. conn.Close()
  30. wg.Done()
  31. }(wg)
  32. var client proto.ServiceClient
  33. client = proto.NewServiceClient(conn)
  34. for i := 0; i < *requests; i++ {
  35. repl, err := client.Apply(context.Background(), &proto.ApplyReqData{Name: "demo", Balance: int32(*balancetype)})
  36. if err != nil {
  37. log.Println("出错了")
  38. log.Fatalln(err.Error())
  39. }
  40. log.Println("结果", thread, repl.Addr, repl.ResourceId)
  41. //TODO 业务调用
  42. conn, err := grpc.Dial(repl.Addr, grpc.WithInsecure())
  43. if err != nil {
  44. return
  45. }
  46. defer conn.Close()
  47. demo_client := proto.NewDemoServiceClient(conn)
  48. demo_repl, err := demo_client.Say(context.Background(), &proto.DemoReq{
  49. Name: "张三",
  50. })
  51. if err != nil {
  52. log.Println(err.Error())
  53. } else {
  54. log.Println("back::", thread, demo_repl.Data)
  55. }
  56. //time.Sleep(time.Duration(rand.Intn(5)) * time.Second)
  57. //只有使用SEQ负载模式,需要调用释放资源
  58. release_repl, err := client.Release(context.Background(), &proto.StringReqData{Data: repl.ResourceId})
  59. if err != nil {
  60. log.Println("出错了")
  61. log.Fatalln(err.Error())
  62. } else {
  63. log.Println(thread, release_repl.Data)
  64. }
  65. }
  66. }
  67. func main() {
  68. wg := new(sync.WaitGroup)
  69. for i := 0; i < *threads; i++ {
  70. wg.Add(1)
  71. go run(i, wg)
  72. }
  73. wg.Wait()
  74. log.Println("all ok")
  75. }