用 Golang 写了一个 Task Queue

2017-10-27 18:12:32 +08:00
 herozem

参考自 Celery 和 Python-RQ 的实现, 用 Golang 实现了一个分布式任务队列. 目前的功能有:

链接: https://github.com/jiajunhuang/toq

3829 次点击
所在节点    分享创造
10 条回复
TangMonk
2017-10-27 19:07:35 +08:00
感觉可以不要 redis 了
herozem
2017-10-27 19:35:23 +08:00
@TangMonk 为啥, 你是指用 Golang 不需要 task queue? 还是说可以使用其他的作为 broker 呢?
timothyye
2017-10-27 19:41:47 +08:00
有没有性能测试数据?
TangMonk
2017-10-27 20:09:18 +08:00
@herozem 想错了,不好意思
herozem
2017-10-27 20:40:42 +08:00
@timothyye 暂时还没有, 我想等我到 0.1 版(完成目前列出来的功能,包括平滑重启)之后,再写性能测试吧,目前主要继续专注功能上的开发
lights
2017-10-27 21:06:17 +08:00
x 是表示有还是表示没有?
另外数据固化以及队列的多端生产和多端消费怎么样
timothyye
2017-10-27 21:14:54 +08:00
@lights markdown 应该显示成√的,不知道为啥没显示出来
herozem
2017-10-27 21:25:17 +08:00
@lights 基于 redis 的任务队列有一个通病,就是很难保证消费者挂了之后任务不丢失. 目前 toq 也存在这个问题, 这是上面 TODO 中 HA 这一步要做的. 多端生产是支持的, 只要按照协议往 broker 中打入数据即可. 多端消费也是支持的. 我刚刚提交了一个新的提交, 引入了 `sleepy mode`, 即, 消费者端忙碌时, 会延迟从 broker 拉任务. 这也是为之后做任务不丢失的铺垫.
yzjustc
2018-06-12 22:44:21 +08:00
@herozem 刚才看了下你这个队列,retry 的时候不应该再用新的 goroutine 而是接在本协程栈做,递归或者循环都可以,如果开新 goroutine,可能一个 task 会执行两次,一个 token 回放了两次
yzjustc
2018-06-12 22:50:37 +08:00
@herozem 正在想做一个类似的任务分发工具用于内部生产环境,请问这个项目还在做吗?

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

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

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

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

© 2021 V2EX