taskCore.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package task_core
  2. import (
  3. task_pg "fwh-toolbox-server/task/plugin"
  4. "github.com/hibiken/asynq"
  5. "go.uber.org/zap"
  6. )
  7. // type TaskCore interface {
  8. // CreateTask() *asynq.Client
  9. // }
  10. type TaskCore struct {
  11. redisOpt asynq.RedisClientOpt
  12. client *asynq.Client
  13. Scheduler *task_pg.SchedulerManager
  14. Inspector *task_pg.InspectorManager
  15. }
  16. type TaskConfig struct {
  17. Name string // 任务名
  18. SvrCfg asynq.Config
  19. Mux *asynq.ServeMux
  20. Agg *task_pg.AggregatorManager // 可选
  21. }
  22. // 创建TaskCore
  23. func NewTaskCore(redisOpt asynq.RedisClientOpt) *TaskCore {
  24. return &TaskCore{
  25. redisOpt: redisOpt,
  26. client: asynq.NewClient(redisOpt),
  27. Scheduler: task_pg.NewSchedulerManager(redisOpt),
  28. Inspector: task_pg.NewInspectorManager(redisOpt),
  29. }
  30. }
  31. // 创建任务
  32. func (tc *TaskCore) CreateTask(config TaskConfig) *asynq.Client {
  33. if config.Mux != nil {
  34. svr := asynq.NewServer(tc.redisOpt, config.SvrCfg)
  35. go func() {
  36. err := svr.Run(config.Mux)
  37. if err != nil {
  38. zap.L().Error("could not run server", zap.String("err", err.Error()), zap.String("taskName", config.Name))
  39. return
  40. }
  41. zap.L().Warn("asynq server shutdown", zap.String("taskName", config.Name))
  42. }()
  43. } else {
  44. zap.L().Warn("asynq not server", zap.String("taskName", config.Name))
  45. }
  46. if tc.client == nil {
  47. tc.client = asynq.NewClient(tc.redisOpt)
  48. }
  49. return tc.client
  50. }