我的应用程序创建了必须按用户顺序处理的 resque 作业,并且应该尽可能快地处理它们(最大延迟 1 秒)。
示例:为 user1 创建 job1 和 job2,为 user2 创建 job3。Resque 可以并行处理 job1 和 job3,但是 job1 和 job2 应该顺序处理。
我对解决方案有不同的想法:
- 我可以使用不同的队列(例如 queue_1 ... queue_10)并为每个队列启动一个工作人员(例如
rake resque:work QUEUE=queue_1
)。用户在运行时(例如登录时、每天等)被分配给队列/工作人员 - 我可以使用动态“用户队列”(例如 queue_#{user.id})并尝试扩展 resque 以使一次只能有 1 个工作人员处理一个队列(如Resque 中所述:每个队列一个工作人员)
- 我可以将作业放在非 resque 队列中,并使用处理这些作业的 resque-lock ( https://github.com/defunkt/resque-lock ) 的“每用户元作业”。
您在实践中对其中一种情况有任何经验吗?还是有其他值得思考的想法?我将不胜感激任何输入,谢谢!