2

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

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

这种情况很少发生,通常是我们接到客户的特殊电话,因此扩展、重新设计似乎并不是完全必要的。

4

2 回答 2

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

于 2013-10-21T19:00:08.777 回答
0

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

于 2013-10-10T04:52:32.340 回答