V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
a719114136
V2EX  ›  Go 编程语言

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

  •  
  •   a719114136 ·
    gojuukaze · 2019-09-03 10:41:25 +08:00 · 5061 次点击
    这是一个创建于 1943 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    特性:

    • 支持几乎所有类型,包括基本类型( int, floalt, string...),数组切片,结构体以及复杂的结构体嵌套。
    • 注册任务,调用任务一行代码完成,不需要对参数进行而外处理。
    • 优雅的启动与结束方式,能 1 秒结束任务(如果你用过其他的框架(比如 gocelery,machinery )会发现就算没有任务,他们也没法立即结束任务,而是需要等几秒)

    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)
    
    7 条回复    2019-09-16 15:52:37 +08:00
    a719114136
        1
    a719114136  
    OP
       2019-09-03 11:46:38 +08:00 via Android
    打破 0 回复
    xjqxz2
        2
    xjqxz2  
       2019-09-03 20:29:05 +08:00
    为啥不用 NSQ~
    a719114136
        3
    a719114136  
    OP
       2019-09-03 22:10:18 +08:00 via Android
    @xjqxz2 算是理念不同吧。nsq 是消息队列,他传递的是消息,这个相当于 celery 的 go 实现,是任务队列,传递的是任务。
    比较典型的应用场景就是:
    消息队列,可以用来消费日志,把多台服务器的日志合并。但任务队列却不适合这种场景。
    任务队列,可以用来处理异步的计算任务,比如用户购买了一件物品,需要计算用户的积分等,更新数据库,这时用任务队列比较合适。

    消息队列侧重消息的吞吐,处理。任务队列,侧重任务执行,重试,结果返回。
    消息队列可以代替任务队列,但还需要进行而外开发,在任务的执行上,提供的功能也不如任务队列。
    任务队列更像远程函数调用,不过它和 thrift, grpc 也有不同,它不需要定义描述文件,也不是直接请求,而是借助消息队列传递任务信息
    a719114136
        4
    a719114136  
    OP
       2019-09-03 22:15:19 +08:00 via Android   ❤️ 1
    @xjqxz2 在一定程度上,任务队列相当于消息队列在异步任务场景上的深度定制化开发。
    heavyrainn
        5
    heavyrainn  
       2019-09-11 17:26:14 +08:00
    给个 star,之前用 machinary 感觉坑好多…后来渐渐不用了,改用 nats-streaming 自己实现异步任务队列了…
    a719114136
        6
    a719114136  
    OP
       2019-09-12 09:19:14 +08:00 via Android
    @heavyrainn 哈哈,多谢~我也是觉得 machinary 不爽才自己写了个的
    dbskcnc
        7
    dbskcnc  
       2019-09-16 15:52:37 +08:00
    与 uber cadence 比有何不同?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1949 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:50 · PVG 08:50 · LAX 16:50 · JFK 19:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.