爱意满满的作品展示区。
herozem

用 Golang 写了一个 Task Queue

  •  
  •   herozem · Oct 27, 2017 · 4580 views
    This topic created in 3119 days ago, the information mentioned may be changed or developed.

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

    • [x] 并发执行任务
    • [x] 简单易使用
    • [x] 语言无关的协议
    • [x] 分布式
    • [ ] 高可用
    • [ ] 重试机制
    • [ ] 无缝重启

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

    10 replies    2018-06-12 22:50:37 +08:00
    TangMonk
        1
    TangMonk  
       Oct 27, 2017 via Android
    感觉可以不要 redis 了
    herozem
        2
    herozem  
    OP
       Oct 27, 2017
    @TangMonk 为啥, 你是指用 Golang 不需要 task queue? 还是说可以使用其他的作为 broker 呢?
    timothyye
        3
    timothyye  
       Oct 27, 2017 via Android
    有没有性能测试数据?
    TangMonk
        4
    TangMonk  
       Oct 27, 2017 via Android
    @herozem 想错了,不好意思
    herozem
        5
    herozem  
    OP
       Oct 27, 2017
    @timothyye 暂时还没有, 我想等我到 0.1 版(完成目前列出来的功能,包括平滑重启)之后,再写性能测试吧,目前主要继续专注功能上的开发
    lights
        6
    lights  
       Oct 27, 2017 via iPhone
    x 是表示有还是表示没有?
    另外数据固化以及队列的多端生产和多端消费怎么样
    timothyye
        7
    timothyye  
       Oct 27, 2017 via Android
    @lights markdown 应该显示成√的,不知道为啥没显示出来
    herozem
        8
    herozem  
    OP
       Oct 27, 2017
    @lights 基于 redis 的任务队列有一个通病,就是很难保证消费者挂了之后任务不丢失. 目前 toq 也存在这个问题, 这是上面 TODO 中 HA 这一步要做的. 多端生产是支持的, 只要按照协议往 broker 中打入数据即可. 多端消费也是支持的. 我刚刚提交了一个新的提交, 引入了 `sleepy mode`, 即, 消费者端忙碌时, 会延迟从 broker 拉任务. 这也是为之后做任务不丢失的铺垫.
    yzjustc
        9
    yzjustc  
       Jun 12, 2018
    @herozem 刚才看了下你这个队列,retry 的时候不应该再用新的 goroutine 而是接在本协程栈做,递归或者循环都可以,如果开新 goroutine,可能一个 task 会执行两次,一个 token 回放了两次
    yzjustc
        10
    yzjustc  
       Jun 12, 2018
    @herozem 正在想做一个类似的任务分发工具用于内部生产环境,请问这个项目还在做吗?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5901 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 02:38 · PVG 10:38 · LAX 19:38 · JFK 22:38
    ♥ Do have faith in what you're doing.