main.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /**
  2. 服务治理 服务提供者端代理工具
  3. 代为注册服务,维护服务生命周期
  4. */
  5. package main
  6. import (
  7. "app.yhyue.com/BP/servicerd/proto"
  8. "context"
  9. "flag"
  10. "fmt"
  11. "google.golang.org/grpc"
  12. "log"
  13. "os"
  14. "os/signal"
  15. "time"
  16. )
  17. var (
  18. rd_server = flag.String("rd", "192.168.3.240:10021", "服务治理中心地址")
  19. service_name = flag.String("sn", "ocr", "服务名称")
  20. service_ip = flag.String("ip", "192.168.20.100", "服务提供者IP")
  21. service_port = flag.Int("port", 25400, "服务提供者端口")
  22. service_workers = flag.Int("wks", 5, "服务提供者支持并发数")
  23. )
  24. var meta *proto.ServiceMeta
  25. func init() {
  26. flag.Parse()
  27. meta = &proto.ServiceMeta{
  28. Name: *service_name,
  29. Ip: *service_ip,
  30. Port: int32(*service_port),
  31. Balance: 0,
  32. Workers: int32(*service_workers),
  33. }
  34. }
  35. //
  36. func heartbeat() {
  37. conn, err := grpc.Dial(*rd_server, grpc.WithInsecure())
  38. if err != nil {
  39. return
  40. }
  41. defer conn.Close()
  42. client := proto.NewHeartBeatClient(conn)
  43. //调用服务端推送流
  44. resp, _ := client.PutStream(context.Background())
  45. tm := time.NewTicker(20 * time.Second)
  46. for {
  47. select {
  48. case <-tm.C:
  49. reqstreamData := &proto.StreamReqData{ServiceName: *service_name, ServiceAddr: fmt.Sprintf("%s:%d", *service_ip, *service_port)}
  50. _ = resp.Send(reqstreamData)
  51. }
  52. }
  53. }
  54. //服务注册
  55. func registe() {
  56. conn, err := grpc.Dial(*rd_server, grpc.WithInsecure())
  57. if err != nil {
  58. return
  59. }
  60. defer conn.Close()
  61. client := proto.NewServiceClient(conn)
  62. ret, err := client.Registe(context.TODO(), meta)
  63. if err != nil {
  64. log.Println(err.Error())
  65. } else {
  66. log.Println(ret)
  67. }
  68. }
  69. //服务注销
  70. func destory() {
  71. conn, err := grpc.Dial(*rd_server, grpc.WithInsecure())
  72. if err != nil {
  73. return
  74. }
  75. defer conn.Close()
  76. client := proto.NewServiceClient(conn)
  77. ret, err := client.Destory(context.TODO(), meta)
  78. if err != nil {
  79. log.Println(err.Error())
  80. } else {
  81. log.Println(ret)
  82. }
  83. }
  84. func main() {
  85. go heartbeat() //心跳
  86. registe()
  87. c := make(chan os.Signal, 1)
  88. signal.Notify(c, os.Interrupt, os.Kill)
  89. <-c
  90. log.Println("服务注销")
  91. destory()
  92. }