123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- /**
- 服务治理 服务提供者端代理工具
- 代为注册服务,维护服务生命周期
- */
- 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()
- }
|