package main import ( "context" "os" "os/signal" "syscall" "model-asynch/controller" "model-asynch/service" _ "gitea.com/red-future/common/config" "gitea.com/red-future/common/http" "gitea.com/red-future/common/jaeger" _ "gitea.com/red-future/common/swagger" _ "github.com/gogf/gf/contrib/drivers/pgsql/v2" _ "github.com/gogf/gf/contrib/nosql/redis/v2" "github.com/gogf/gf/v2/frame/g" ) func main() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() defer jaeger.ShutDown(ctx) // 注册路由 http.RouteRegister([]interface{}{ controller.Model, controller.Task, }) // 启动后台任务:worker + 清理器 if g.Cfg().MustGet(ctx, "asynch.worker.enabled", true).Bool() { service.AsyncWorker.Start(ctx) // 启动 worker 协程池 } else { g.Log().Warningf(ctx, "[main] asynch.worker.enabled=false,跳过启动 worker") } if g.Cfg().MustGet(ctx, "asynch.cleaner.enabled", true).Bool() { service.Cleaner.Start(ctx) // 启动清理器 } else { g.Log().Warningf(ctx, "[main] asynch.cleaner.enabled=false,跳过启动 cleaner") } // 监听退出信号,确保 Ctrl+C 能完整退出(停止 worker/cleaner 并关闭 http server) quit := make(chan os.Signal, 1) signal.Notify(quit, os.Interrupt, syscall.SIGTERM) <-quit g.Log().Infof(ctx, "[main] 收到退出信号,开始优雅退出...") cancel() // 停止 worker(关闭协程池) service.AsyncWorker.Stop(ctx) // 关闭 http server(RouteRegister 内部是 go Httpserver.Run() 启动的) _ = http.Httpserver.Shutdown() }