Go 异步任务队列 YTask 发布,欢迎使用!

2019-09-03 10:41:25 +08:00
 a719114136

YTask 是 Go 的异步任务队列,比起其他框架更方便快捷。

特性:

GitHub

安装

go get github.com/gojuukaze/YTask/v2

注册任务

type User struct{
    ...
}
// 任务函数
func DemoFunc(a int, b float64, c []string, user User) (int, []User, string) {
    ....
    return ....
}

...

ser.Add("group1", "demo_func", DemoFunc)

调用任务

taskId, _ = client.Send("group1", "demo_func", 11, 22.2, []string{"bb", "cc"}, User{"hh",24})

获取结果

result, _ = client.GetResult(taskId, 2*time.Second, 300*time.Millisecond)
var a int
var b []User
var c string
a, _ = result.GetInt64(0)
// or
result.Get(1,&b)
// or
result.Gets(&a, &b, &c)
4908 次点击
所在节点    Go 编程语言
7 条回复
a719114136
2019-09-03 11:46:38 +08:00
打破 0 回复
xjqxz2
2019-09-03 20:29:05 +08:00
为啥不用 NSQ~
a719114136
2019-09-03 22:10:18 +08:00
@xjqxz2 算是理念不同吧。nsq 是消息队列,他传递的是消息,这个相当于 celery 的 go 实现,是任务队列,传递的是任务。
比较典型的应用场景就是:
消息队列,可以用来消费日志,把多台服务器的日志合并。但任务队列却不适合这种场景。
任务队列,可以用来处理异步的计算任务,比如用户购买了一件物品,需要计算用户的积分等,更新数据库,这时用任务队列比较合适。

消息队列侧重消息的吞吐,处理。任务队列,侧重任务执行,重试,结果返回。
消息队列可以代替任务队列,但还需要进行而外开发,在任务的执行上,提供的功能也不如任务队列。
任务队列更像远程函数调用,不过它和 thrift, grpc 也有不同,它不需要定义描述文件,也不是直接请求,而是借助消息队列传递任务信息
a719114136
2019-09-03 22:15:19 +08:00
@xjqxz2 在一定程度上,任务队列相当于消息队列在异步任务场景上的深度定制化开发。
heavyrainn
2019-09-11 17:26:14 +08:00
给个 star,之前用 machinary 感觉坑好多…后来渐渐不用了,改用 nats-streaming 自己实现异步任务队列了…
a719114136
2019-09-12 09:19:14 +08:00
@heavyrainn 哈哈,多谢~我也是觉得 machinary 不爽才自己写了个的
dbskcnc
2019-09-16 15:52:37 +08:00
与 uber cadence 比有何不同?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/597427

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX