package main import ( "context" "model-gateway/consts/public" "model-gateway/service" "model-gateway/service/utils" "os" "os/signal" "syscall" "time" "model-gateway/controller" "gitea.redpowerfuture.com/red-future/common/http" "gitea.redpowerfuture.com/red-future/common/jaeger" _ "gitea.redpowerfuture.com/red-future/common/swagger" gmq "github.com/bjang03/gmq/core/gmq" "github.com/bjang03/gmq/mq" _ "github.com/gogf/gf/contrib/drivers/pgsql/v2" _ "github.com/gogf/gf/contrib/nosql/redis/v2" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gtimer" ) func main() { ctx := context.Background() defer jaeger.ShutDown(ctx) // 初始化全局协程池(最大 goroutine 数,从配置文件读取,默认 100) workerNum := g.Cfg().MustGet(ctx, "pool.workerNum", utils.DefaultWorkerNum).Int() utils.Init(workerNum) g.Log().Infof(ctx, "[main] 全局协程池已初始化, workerNum=%d", workerNum) // 注册路由 http.RouteRegister([]interface{}{ controller.ModelCall, controller.ModelManage, controller.ModelErrorMemory, }) gmq.GmqRegister(public.GmqMsgPluginsName, &mq.NatsConn{ NatsConfig: mq.NatsConfig{ Addr: g.Config().MustGet(ctx, "nats.addr").String(), Port: g.Config().MustGet(ctx, "nats.port").String(), Username: g.Config().MustGet(ctx, "nats.username").String(), Password: g.Config().MustGet(ctx, "nats.password").String(), }, }) gtimer.AddSingleton(ctx, 10*time.Second, func(ctx context.Context) { err := service.ModelTaskEndService.GetTaskStartList(ctx) if err != nil { g.Log().Error(ctx, "模型视频任务处理失败 err: %v", err) } }) // 监听退出信号,确保 Ctrl+C 能完整退出(停掉定时器与协程池,等任务执行完成再关闭) quit := make(chan os.Signal, 1) signal.Notify(quit, os.Interrupt, syscall.SIGTERM) <-quit utils.Shutdown() g.Log().Infof(ctx, "[main] 全局协程池已关闭") // 收到退出信号后,关闭全局协程池,等待所有已提交的任务执行完成 g.Log().Info(ctx, "服务正在关闭...") }