feat: refactor task queue system for improved efficiency

- Add a new method `Enqueue` to enqueue tasks with specific options

Signed-off-by: Sinh <luuvansinh555@gmail.com>
This commit is contained in:
Sinh 2024-07-08 16:17:11 +07:00
parent ae421219cb
commit 53b7e99882
1 changed files with 30 additions and 0 deletions

30
task.go
View File

@ -38,6 +38,36 @@ func (i Instance) RunTask(typename string, payload []byte, priority string, retr
return i.Client.Enqueue(task, options...) return i.Client.Enqueue(task, options...)
} }
func (i Instance) Enqueue(typename string, payload []byte, priority string, retryTimes int, processIn time.Duration) (*asynq.TaskInfo, error) {
// Create task and options
task := asynq.NewTask(typename, payload)
options := make([]asynq.Option, 0)
// Priority
if priority != PriorityCritical && priority != PriorityDefault && priority != PriorityLow {
priority = PriorityDefault
}
priority = i.Config.QueuePrefix + priority
options = append(options, asynq.Queue(priority))
// Retry times
if retryTimes < 0 {
retryTimes = 0
}
options = append(options, asynq.MaxRetry(retryTimes))
// Task timeout
if i.Config.TaskTimeout > 0 {
options = append(options, asynq.Timeout(i.Config.TaskTimeout))
}
if processIn > 0 {
options = append(options, asynq.ProcessIn(processIn))
}
// Enqueue task
return i.Client.Enqueue(task, options...)
}
// ScheduledTask create new task and run at specific time // ScheduledTask create new task and run at specific time
// cronSpec follow cron expression // cronSpec follow cron expression
// https://www.freeformatter.com/cron-expression-generator-quartz.html // https://www.freeformatter.com/cron-expression-generator-quartz.html