一个 webman 项目,用到了 redis 队列,该项目部署到 A 和 B 两台服务器,这样的话,A 和 B 都会同时消费队列吧?假如从队列 pop 后要写入 MySQL,那可能写入库的顺序就不是入队的顺序了。如果有严格的消费顺序要求,多机部署 webman 项目时,怎么保证消费的顺序正确呢?可以设置只在其中一台服务器上消费吗? 谢谢~
workerman/crontab 也是,也会在多机都执行吧。
Laravel 的任务调度有限制只在一台服务器执行的方法: https://learnku.com/docs/laravel/8.x/scheduling/9399#d9201c
webman只能保证按顺序从队列里取数据,至于业务消费后插入数据库的时机,这完全是由你们业务代码控制的,webman没办法控制。
即使只用一台服务器消费,多个消费进程也是并发执行的,和多服务器没有实质区别。除非你单机单进程消费,那么入库肯定是严格按照消费顺序来的。
我觉得最好的方案就是业务自己做下处理,比如每个消息都带一个序列号,入库的时候按照序列号入库,查询的时候按照序列号排序查询。或者根据你的业务找一个其它方案。
谢谢~
这种,冥等性问题,都应该在业务层自行处理
workerman/crontab 也是,也会在多机都执行吧。
Laravel 的任务调度有限制只在一台服务器执行的方法:
https://learnku.com/docs/laravel/8.x/scheduling/9399#d9201c
webman只能保证按顺序从队列里取数据,至于业务消费后插入数据库的时机,这完全是由你们业务代码控制的,webman没办法控制。
即使只用一台服务器消费,多个消费进程也是并发执行的,和多服务器没有实质区别。除非你单机单进程消费,那么入库肯定是严格按照消费顺序来的。
我觉得最好的方案就是业务自己做下处理,比如每个消息都带一个序列号,入库的时候按照序列号入库,查询的时候按照序列号排序查询。或者根据你的业务找一个其它方案。
谢谢~
这种,冥等性问题,都应该在业务层自行处理