diff --git a/app/mix/cmd/main.go b/app/mix/cmd/main.go index 1dee82bf..9ee2d1cc 100644 --- a/app/mix/cmd/main.go +++ b/app/mix/cmd/main.go @@ -1,13 +1,10 @@ package main import ( - "context" "fmt" "net" "net/http" "os" - "os/exec" - "os/signal" "runtime" "service/api/consts" "service/app/mix/conf" @@ -21,6 +18,7 @@ import ( videomoderation "service/library/contentaudit/video_moderation" "service/library/dingtalk" "service/library/httpengine" + "service/library/httpserver" "service/library/logger" "service/library/middleware" "service/library/redis" @@ -28,7 +26,6 @@ import ( "service/library/sms" "service/library/validator" "strings" - "syscall" "time" ) @@ -134,43 +131,7 @@ func main() { Handler: router, } - go func() { - if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { - logger.Fatal("listen: %v", err) - return - } - }() - - // 注册服务 - go func() { - err := registerSD(ip, port) - if err != nil { - logger.Fatal("registerSD: %v", err) - return - } - setServerStatusFD(ServerStatusFDRun) - }() - - quit := make(chan os.Signal, 1) - signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) - <-quit - - if err := servicediscovery.DeRegister(ip, port); err != nil { - logger.Fatal("DeRegister fail: %v", err) - } - - ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) - if err := srv.Shutdown(ctx); err != nil { - logger.Fatal("Server Shutdown:", err) - } - defer cancel() - select { - case <-ctx.Done(): - logger.Info("timeout of 1 seconds.") - } - - logger.Info("Server exited") - setServerStatusFD(ServerStatusFDStop) + httpserver.StartHttpServer(srv, cfg.DefaultConfig, ip, port) } func PrintAndExit(msg string) { @@ -203,47 +164,3 @@ func GetIp() string { } return retIp } - -func registerSD(ip string, port int) error { - // 要等服务起来后再注册到consul,否则会有问题 - // 方法:调用 healthcheck - idx := 0 - timer := time.NewTimer(time.Second * 5) - timerRetry := time.NewTicker(time.Second * 1) - for { - select { - case <-timer.C: - return fmt.Errorf("registerSD fail, ip: %v, port: %v", ip, port) - case <-timerRetry.C: - idx += 1 - resp, err := http.Get(fmt.Sprintf("http://%s:%v/healthcheck", ip, port)) - if err != nil { - logger.Error("healthcheck fail, err: %v", err) - continue - } - if resp.StatusCode == http.StatusOK { - if err := servicediscovery.Register(ip, port); err != nil { - logger.Error("registerSD fail, ip: %v, port: %v, err: %v", ip, port, err) - continue - } - return nil - } - } - } -} - -func setServerStatusFD(status string) { - serverStatusFdPath := "/app/SERVER_STATUS_FD" - cmd := exec.Command("sh", "-c", fmt.Sprintf("echo %s > %s", status, serverStatusFdPath)) - err := cmd.Run() - if err != nil { - logger.Info("run cmd fail, p: %v, err: %v", serverStatusFdPath, err) - return - } - logger.Info("SetServerStatusFD success: %v", status) -} - -const ( - ServerStatusFDRun = "RUN" // 服务运行中 - ServerStatusFDStop = "STOP" // 服务停止 -) diff --git a/library/httpserver/httpserver.go b/library/httpserver/httpserver.go index b2538874..2ee81393 100644 --- a/library/httpserver/httpserver.go +++ b/library/httpserver/httpserver.go @@ -26,7 +26,6 @@ func StartHttpServer(srv *http.Server, cfg *configcenter.DefaultConfig, ip strin logger.Fatal("listen: %v", err) return } - }() // 注册服务 @@ -39,44 +38,32 @@ func StartHttpServer(srv *http.Server, cfg *configcenter.DefaultConfig, ip strin setServerStatusFD(ServerStatusFDRun) }() - done := make(chan int) - go func() { - quit := make(chan os.Signal, 1) - signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) - for { - select { - case <-quit: - logger.Info("Shutdown Server ...") - for i := 0; i < 10; i++ { - logger.Info("__Shutdown sleep %v", i+1) - time.Sleep(time.Second) - } + quit := make(chan os.Signal, 1) + signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) + <-quit + logger.Info("Shutdown Server ...") + for i := 0; i < 10; i++ { + logger.Info("__Shutdown sleep %v", i+1) + time.Sleep(time.Second) + } - if err := servicediscovery.DeRegister(ip, port); err != nil { - logger.Fatal("DeRegister fail: %v", err) - } + if err := servicediscovery.DeRegister(ip, port); err != nil { + logger.Fatal("DeRegister fail: %v", err) + } - ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) - if err := srv.Shutdown(ctx); err != nil { - logger.Fatal("Server Shutdown:", err) - } + ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) + if err := srv.Shutdown(ctx); err != nil { + logger.Fatal("Server Shutdown:", err) + } + defer cancel() - select { - case <-ctx.Done(): - logger.Info("timeout of 1 seconds.") - } + select { + case <-ctx.Done(): + logger.Info("timeout of 1 seconds.") + } - logger.Info("Server exited") - setServerStatusFD(ServerStatusFDStop) - cancel() - done <- 1 - return - } - } - }() - - <-done - logger.Info("Server done") + logger.Info("Server exited") + setServerStatusFD(ServerStatusFDStop) } func registerSD(ip string, port int) error { diff --git a/library/redis/redis.go b/library/redis/redis.go index b80efdb2..babe202e 100644 --- a/library/redis/redis.go +++ b/library/redis/redis.go @@ -816,7 +816,6 @@ func (c *Client) closePool() { go func() { <-ch c.pool.Close() - os.Exit(0) }() }