1
rekulas 2023-07-07 14:30:12 +08:00
主任务判断不一定非要依赖队列库,可以自己封装实现,就比较灵活了,随便找个队列工具都可以用
|
2
AnYi798 OP @rekulas redis 和 rabbitmq 都用了,主要感觉自己写判断逻辑太麻烦了,我一个小白写着写着就晕了,还是想找个成熟一点的直接用
|
3
GeorgeWai 2023-07-07 14:33:43 +08:00
基于 golang 的协程+chan 自己造个吧,基于 gpt4.0 ,问题不大,只要 prompt 方向对。
|
5
hahasong 2023-07-07 14:40:19 +08:00
context + chan 自己就撸了 要开多少个协程就看你硬件配置了
|
6
Nazz 2023-07-07 14:41:31 +08:00
来个 star 吧, 泛型实现的任务队列
https://github.com/lxzan/concurrency ```go package main import ( "fmt" "github.com/lxzan/concurrency" "sync/atomic" ) func main() { sum := int64(0) w := concurrency.NewWorkerGroup[int64]() for i := int64(1); i <= 10; i++ { w.Push(i) } w.OnMessage = func(args int64) error { fmt.Printf("%v ", args) atomic.AddInt64(&sum, args) return nil } w.Start() fmt.Printf("sum=%d\n", sum) } ``` 输出 ``` 4 5 6 7 8 9 10 1 3 2 sum=55 ``` |
7
777777 2023-07-07 14:45:17 +08:00
https://github.com/RichardKnop/machinery ( redis ,mq ),https://github.com/hibiken/asynq (基于 redis )
|
8
777777 2023-07-07 14:47:14 +08:00
分布式可以用上面两个,单体就用原始 chan
|
9
AnYi798 OP @777777 asynq 我用了 但是感觉不太符合我的要求 总感觉有问题 但是又不知道哪里有问题 。。。。。。。。。。。。。。。。。。 不是我想要的那种任务队列
|
10
Nazz 2023-07-07 14:49:06 +08:00
看看这个, 无 channel 实现的任务队列, 搭配 WaitGroup 使用就符合你的需求了
https://github.com/lxzan/gws/blob/master/task.go |
12
flyqie 2023-07-07 16:07:27 +08:00
你说的任务层级是需要干净 cancel 的吗?
如果是的话用协程不好做。 |
13
jorneyr 2023-07-07 18:04:10 +08:00
channel 不就是天生的阻塞任务队列么。
|
14
lasuar 2023-07-07 18:14:01 +08:00
直接用 chan 足够,需要持久化用 kafka 或其他 mq
|
15
dnsjia 2023-07-07 18:28:45 +08:00
asynq https://www.ziji.work/golang/asynq-go-crontab-tasks.html
|