无论如何要在两个不同的队列之间移动一个resque作业?
我们有时会遇到这样的情况,即我们有一个大队列,而一项工作接近尾声,我们发现需要“提高其优先级”。我们认为这可能是一种简单的方法,可以简单地将其移动到另一个队列,该队列有一个工作人员在等待任何高优先级作业。
这种情况很少发生,通常是我们接到客户的特殊电话,因此扩展、重新设计似乎并不是完全必要的。
无论如何要在两个不同的队列之间移动一个resque作业?
我们有时会遇到这样的情况,即我们有一个大队列,而一项工作接近尾声,我们发现需要“提高其优先级”。我们认为这可能是一种简单的方法,可以简单地将其移动到另一个队列,该队列有一个工作人员在等待任何高优先级作业。
这种情况很少发生,通常是我们接到客户的特殊电话,因此扩展、重新设计似乎并不是完全必要的。
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
如果这种情况很少发生,您最好手动将新作业推送到较短的队列中。您需要确保您的系统有一种方法来识别作业已经运行并退出,以便当长队列中的作业最终到达时不会再次处理它(如果双重处理是一个问题你)。