package main import ( "context" "log" "net/http" "os" "os/signal" "recook/configs" "recook/internal/api/manage" "recook/internal/api/mobile" _ "recook/internal/api/mobile/bill" "recook/internal/api/store" "recook/internal/api/vend" "recook/internal/cron" "recook/internal/dbc" "recook/internal/mq" "runtime" "syscall" "time" "github.com/gin-gonic/gin" cron2 "github.com/robfig/cron" "github.com/shopspring/decimal" "golang.org/x/sync/errgroup" ) var ( g errgroup.Group ) func main() { //dirs := []string{"credentials"} // 设置需要释放的目录 //for _, dir := range dirs { // // 解压dir目录到当前目录 // if err := asset.RestoreAssets("./", dir); err != nil { // log.Println(err) // break // } //} runtime.GOMAXPROCS(runtime.NumCPU()) decimal.MarshalJSONWithoutQuotes = true dbc.SetupMysql() dbc.SetupRedis() if configs.IsProductionEnv() { mq.SetUpMq() } if configs.IsProductionEnv() { mq.SetUpShaMa() } if configs.IsProductionEnv() { gin.SetMode("release") } else { gin.SetMode("debug") } /*将今天的数据copy一份分发到接下来的30天*/ manageServer := &http.Server{ Addr: ":8080", Handler: manage.Service(), ReadTimeout: 5 * time.Second, WriteTimeout: 10 * time.Second, } appServer := &http.Server{ Addr: ":8081", Handler: mobile.Service(), ReadTimeout: 5 * time.Second, WriteTimeout: 10 * time.Second, } vendServer := &http.Server{ Addr: ":8082", Handler: vend.Service(), ReadTimeout: 5 * time.Second, WriteTimeout: 10 * time.Second, } storeServer := &http.Server{ Addr: ":8083", Handler: store.Service(), ReadTimeout: 5 * time.Second, WriteTimeout: 10 * time.Second, } h5Server := &http.Server{ Addr: ":8084", Handler: mobile.Service(), ReadTimeout: 5 * time.Second, WriteTimeout: 10 * time.Second, } g.Go(func() error { return manageServer.ListenAndServe() }) g.Go(func() error { return appServer.ListenAndServe() }) g.Go(func() error { return vendServer.ListenAndServe() }) g.Go(func() error { return storeServer.ListenAndServe() }) c := cron2.New() idleConnClosed := make(chan struct{}) go func() { sigint := make(chan os.Signal, 1) signal.Notify(sigint, syscall.SIGINT, syscall.SIGTERM) <-sigint if err := manageServer.Shutdown(context.Background()); err != nil { log.Printf("HTTP server Shutdown: %v", err) } if err := appServer.Shutdown(context.Background()); err != nil { log.Printf("HTTP server Shutdown: %v", err) } if err := vendServer.Shutdown(context.Background()); err != nil { log.Printf("HTTP server Shutdown: %v", err) } if err := storeServer.Shutdown(context.Background()); err != nil { log.Printf("HTTP server Shutdown: %v", err) } if err := h5Server.Shutdown(context.Background()); err != nil { log.Printf("HTTP server Shutdown: %v", err) } _ = mq.Conn.Close() _ = mq.Conn1.Close() c.Stop() close(idleConnClosed) }() cron.Task(c) c.Start() if err := g.Wait(); err != nil { log.Fatal(err) } }