https://github.com/hibiken/asynq
看文档,
srv := asynq.NewServer(
asynq.RedisClientOpt{Addr: ":6379"},
asynq.Config{Concurrency: 20}, //并发控制
)
h := asynq.NewServeMux()
// ... Register handlers
// Run blocks and waits for os signal to terminate the program.
if err := srv.Run(h); err != nil {
log.Fatal(err)
}
这个是对于整个项目的并发,现在只需要对于不同任务的并发控制,不知道怎么实现。
1
qloog 248 天前
可以控制队列的优先级,也就变相的控制了某个队列的并发数:
srv := asynq.NewServer( asynq.RedisClientOpt{Addr: redisAddr}, asynq.Config{ // Specify how many concurrent workers to use Concurrency: 10, // Optionally specify multiple queues with different priority. Queues: map[string]int{ "queue1": 6, "queue2": 3, "queue3": 1, }, // See the godoc for other configuration options }, ) |
2
awanganddong OP |
3
awanganddong OP 找到解决方案了,可以再重新起一个 server
然后记得指定就可以了 client.Enqueue(task1, asynq.Queue("notifications")) |
4
qloog 234 天前
这个 server 专门跑 notifications 队列?
|
5
awanganddong OP 不是,是一些牵扯到扣费的逻辑,为了保证用户余额的一致性,然后串行扣费。
|