结合实际业务,整了一个 Go 的异步任务框架
資深大佬 : gansteed 19
链接在 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 }
大佬有話說 (8)