package asynqsvc import ( "context" "kpt-pasture/config" "gitee.com/xuyiping_admin/pkg/logger/zaplog" "gitee.com/xuyiping_admin/pkg/xerr" "github.com/hibiken/asynq" "go.uber.org/zap" ) type Option = asynq.Option type Client interface { CtxEnqueue(ctx context.Context, task *asynq.Task, ops ...Option) (*asynq.TaskInfo, error) } func NewClient(cfg *config.AppConfig) Client { setting := NewAsynqSetting(&cfg.SideWorkSetting.AsynqSetting) client := asynq.NewClient(setting.Redis.RedisClientOpt()) return &ClientEntry{client} } type ClientEntry struct { *asynq.Client } func (c *ClientEntry) CtxEnqueue(ctx context.Context, task *asynq.Task, ops ...Option) (*asynq.TaskInfo, error) { taskInfo, err := c.Client.Enqueue(task, ops...) if err != nil { zaplog.Error("asynq CtxEnqueue failed Error ", zap.Any("err", err)) return taskInfo, xerr.WithStack(err) } return taskInfo, nil }