| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- package task_core
- import (
- task_pg "fwh-toolbox-server/task/plugin"
- "github.com/hibiken/asynq"
- "go.uber.org/zap"
- )
- // RedisDB 任务队列使用的 Redis 库号。主服务(worker)与只入队的独立进程(fwh-agent-mcp)必须一致
- const RedisDB = 12
- // type TaskCore interface {
- // CreateTask() *asynq.Client
- // }
- type TaskCore struct {
- redisOpt asynq.RedisClientOpt
- client *asynq.Client
- Scheduler *task_pg.SchedulerManager
- Inspector *task_pg.InspectorManager
- }
- type TaskConfig struct {
- Name string // 任务名
- SvrCfg asynq.Config
- Mux *asynq.ServeMux
- Agg *task_pg.AggregatorManager // 可选
- }
- // 创建TaskCore
- func NewTaskCore(redisOpt asynq.RedisClientOpt) *TaskCore {
- return &TaskCore{
- redisOpt: redisOpt,
- client: asynq.NewClient(redisOpt),
- Scheduler: task_pg.NewSchedulerManager(redisOpt),
- Inspector: task_pg.NewInspectorManager(redisOpt),
- }
- }
- // 创建任务
- func (tc *TaskCore) CreateTask(config TaskConfig) *asynq.Client {
- if config.Mux != nil {
- svr := asynq.NewServer(tc.redisOpt, config.SvrCfg)
- go func() {
- err := svr.Run(config.Mux)
- if err != nil {
- zap.L().Error("could not run server", zap.String("err", err.Error()), zap.String("taskName", config.Name))
- return
- }
- zap.L().Warn("asynq server shutdown", zap.String("taskName", config.Name))
- }()
- } else {
- zap.L().Warn("asynq not server", zap.String("taskName", config.Name))
- }
- if tc.client == nil {
- tc.client = asynq.NewClient(tc.redisOpt)
- }
- return tc.client
- }
|