在队列之间移动Resque作业

时间:2013-10-10 00:49:08

标签: ruby-on-rails resque

无论如何在两个不同的队列之间移动resque作业?

我们有时会遇到这样的情况,即我们有一个很大的队列和一个接近尾声的工作,我们发现需要“提升其优先级”。我们认为这可能是一种简单的方法,可以简单地将其移动到另一个让工人等待任何高优先级工作的队列。

这种情况很少发生,通常情况下我们会收到客户的特殊电话,因此缩放,重新设计似乎并非完全必要。

2 个答案:

答案 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

https://gist.github.com/rafaelbandeira3/7088498

答案 1 :(得分:0)

如果这种情况很少发生,那么只需手动将新作业推入较短的队列即可。您需要确保您的系统有一种方法来识别作业已经运行并挽救,这样当最终到达长队列中的作业时,它不会再次处理(如果双重处理是一个问题,你)。