package main import ( "context" "flag" "fmt" "log" "net" "os" "os/signal" "time" "google.golang.org/grpc" "myschools.me/suguo/consul-demo/consul" "myschools.me/suguo/consul-demo/health" pb "myschools.me/suguo/consul-demo/proto" "myschools.me/suguo/consul-demo/sample" ) const ( //APPNAME 每个服务默认有一个名称 APPNAME string = "demo" ) func main() { addr := flag.String("addr", "0.0.0.0", "service address") port := flag.Int("port", 9001, "service port") flag.Parse() ctx := context.Background() ctx, cancel := context.WithCancel(ctx) defer cancel() // grpc服务定义 s := grpc.NewServer(grpc.MaxRecvMsgSize(1024), grpc.MaxSendMsgSize(1024)) pb.RegisterHelloServer(s, &sample.Server{}) pb.RegisterHealthServer(s, &health.Server{}) // grpc服务启动 go func() { log.Printf("starting grpc service on %s:%d\n", *addr, *port) lis, err := net.Listen("tcp", fmt.Sprintf("%s:%d", *addr, *port)) if err != nil { log.Fatal("fail to open port: ", err) } err = s.Serve(lis) if err != nil { log.Fatal("fail to open microservice: ", err) } }() //注册至consul consul.Register(APPNAME, *addr, *port, "demo") defer consul.DeRegister(APPNAME, *addr, *port) // 服务停止相应 c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt) <-c ctx, cancel = context.WithTimeout(context.Background(), 15*time.Second) defer cancel() log.Println("shutting down") os.Exit(0) }