无论如何在两个不同的队列之间移动resque作业?
我们有时会遇到这样的情况,即我们有一个很大的队列和一个接近尾声的工作,我们发现需要“提升其优先级”。我们认为这可能是一种简单的方法,可以简单地将其移动到另一个让工人等待任何高优先级工作的队列。
这种情况很少发生,通常情况下我们会收到客户的特殊电话,因此缩放,重新设计似乎并非完全必要。
答案 0 :(得分:8)
Resque中没有任何内置功能。您可以使用rpoplpush
之类的:
module Resque
def self.move_queue(source, destination)
r = Resque.redis
r.llen("queue:#{source}").times do
r.rpoplpush("queue:#{source}", "queue:#{destination}")
end
end
end
答案 1 :(得分:0)
如果这种情况很少发生,那么只需手动将新作业推入较短的队列即可。您需要确保您的系统有一种方法来识别作业已经运行并挽救,这样当最终到达长队列中的作业时,它不会再次处理(如果双重处理是一个问题,你)。