taskCore.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. }
  15. type TaskConfig struct {
  16. Name string // 任务名
  17. SvrCfg asynq.Config
  18. Mux *asynq.ServeMux
  19. Agg *task_pg.AggregatorManager // 可选
  20. }
  21. // 创建TaskCore
  22. func NewTaskCore(redisOpt asynq.RedisClientOpt) *TaskCore {
  23. return &TaskCore{
  24. redisOpt: redisOpt,
  25. client: asynq.NewClient(redisOpt),
  26. Scheduler: task_pg.NewSchedulerManager(redisOpt),
  27. }
  28. }
  29. // 创建任务
  30. func (tc *TaskCore) CreateTask(config TaskConfig) *asynq.Client {
  31. if config.Mux != nil {
  32. svr := asynq.NewServer(tc.redisOpt, config.SvrCfg)
  33. go func() {
  34. err := svr.Run(config.Mux)
  35. if err != nil {
  36. zap.L().Error("could not run server", zap.String("err", err.Error()), zap.String("taskName", config.Name))
  37. return
  38. }
  39. zap.L().Warn("asynq server shutdown", zap.String("taskName", config.Name))
  40. }()
  41. } else {
  42. zap.L().Warn("asynq not server", zap.String("taskName", config.Name))
  43. }
  44. if tc.client == nil {
  45. tc.client = asynq.NewClient(tc.redisOpt)
  46. }
  47. return tc.client
  48. }