链接在 https://github.com/jiajunhuang/gotasks
日常开发中,会发现很多异步任务会变的又大又长,其实其中很多任务是可以拆成 n 个子任务的,所以就整了这个框架,用法很简单,首先把任务分成 n 个子任务(不分用一个自然也是 ok 的),注册进去。接下来生产者 Enqueue 任务, 消费者消费任务。
注册的子任务会串成一个链,他们共用一个 map 来存储参数,因此第一个子任务可以修改参数并且返回,第二个子任务拿到的就是修改后的参数。
package main
import (
"time"
"github.com/jiajunhuang/gotasks"
)
const (
uniqueJobName = "a-unique-job-name"
redisURL = "redis://127.0.0.1:6379/0"
queueName = "job-queue-name"
)
func worker() {
gotasks.Run(queueName)
}
func main() {
go worker()
// register tasks
handler1 := func(args gotasks.ArgsMap) (gotasks.ArgsMap, error) {
time.Sleep(time.Duration(1) * time.Second)
return args, nil
}
handler2 := func(args gotasks.ArgsMap) (gotasks.ArgsMap, error) {
time.Sleep(time.Duration(1) * time.Second)
return args, nil
}
gotasks.Register(uniqueJobName, handler1, handler2)
// set broker
gotasks.UseRedisBroker(redisURL, 100)
// enqueue
gotasks.Enqueue(queueName, uniqueJobName, gotasks.MapToArgsMap(map[string]interface{}{})) // or gotasks.StructToArgsMap
}