/** 服务治理 服务提供者端代理工具 代为注册服务,维护服务生命周期 */ package main import ( "app.yhyue.com/BP/servicerd/proto" "context" "flag" "fmt" "google.golang.org/grpc" "log" "os" "os/signal" "time" ) var ( rd_server = flag.String("rd", "192.168.3.240:10021", "服务治理中心地址") service_name = flag.String("sn", "ocr", "服务名称") service_ip = flag.String("ip", "192.168.20.100", "服务提供者IP") service_port = flag.Int("port", 25400, "服务提供者端口") service_workers = flag.Int("wks", 5, "服务提供者支持并发数") ) var meta *proto.ServiceMeta func init() { flag.Parse() meta = &proto.ServiceMeta{ Name: *service_name, Ip: *service_ip, Port: int32(*service_port), Balance: 0, Workers: int32(*service_workers), } } // func heartbeat() { conn, err := grpc.Dial(*rd_server, grpc.WithInsecure()) if err != nil { return } defer conn.Close() client := proto.NewHeartBeatClient(conn) //调用服务端推送流 resp, _ := client.PutStream(context.Background()) tm := time.NewTicker(20 * time.Second) for { select { case <-tm.C: reqstreamData := &proto.StreamReqData{ServiceName: *service_name, ServiceAddr: fmt.Sprintf("%s:%d", *service_ip, *service_port)} _ = resp.Send(reqstreamData) } } } //服务注册 func registe() { conn, err := grpc.Dial(*rd_server, grpc.WithInsecure()) if err != nil { return } defer conn.Close() client := proto.NewServiceClient(conn) ret, err := client.Registe(context.TODO(), meta) if err != nil { log.Println(err.Error()) } else { log.Println(ret) } } //服务注销 func destory() { conn, err := grpc.Dial(*rd_server, grpc.WithInsecure()) if err != nil { return } defer conn.Close() client := proto.NewServiceClient(conn) ret, err := client.Destory(context.TODO(), meta) if err != nil { log.Println(err.Error()) } else { log.Println(ret) } } func main() { go heartbeat() //心跳 registe() c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt, os.Kill) <-c log.Println("服务注销") destory() }