webman 的 redis 队列在多机部署时,多机同时消费问题

ToogleLiu

一个 webman 项目,用到了 redis 队列,该项目部署到 A 和 B 两台服务器,这样的话,A 和 B 都会同时消费队列吧?假如从队列 pop 后要写入 MySQL,那可能写入库的顺序就不是入队的顺序了。如果有严格的消费顺序要求,多机部署 webman 项目时,怎么保证消费的顺序正确呢?可以设置只在其中一台服务器上消费吗?
谢谢~

3414 4 0
4个回答

ToogleLiu

workerman/crontab 也是,也会在多机都执行吧。

  • 暂无评论
ToogleLiu

Laravel 的任务调度有限制只在一台服务器执行的方法:
https://learnku.com/docs/laravel/8.x/scheduling/9399#d9201c

  • 暂无评论
walkor 打赏

webman只能保证按顺序从队列里取数据,至于业务消费后插入数据库的时机,这完全是由你们业务代码控制的,webman没办法控制。

即使只用一台服务器消费,多个消费进程也是并发执行的,和多服务器没有实质区别。除非你单机单进程消费,那么入库肯定是严格按照消费顺序来的。

我觉得最好的方案就是业务自己做下处理,比如每个消息都带一个序列号,入库的时候按照序列号入库,查询的时候按照序列号排序查询。或者根据你的业务找一个其它方案。

evilk

这种,冥等性问题,都应该在业务层自行处理

  • 暂无评论
年代过于久远,无法发表回答
×
🔝