在Resque中,有没有办法将作业压缩到队列的顶部?

时间:2014-06-16 20:19:23

标签: resque

我在队列中的工作优先级高于该队列中的其他工作。 Resque中是否有一种机制可以将此作业移动到队列的顶部?

1 个答案:

答案 0 :(得分:0)

如果它是一个adhoc bump,你可以使用ruby / rails控制台中的redis作为

class_looking_for = "MyWorker"
args_looking_for = [1234, {"foo" => "bar"}]
queue = "foo"
redis = Resque.redis
key = "queue:#{queue}"

redis.llen(key).times do |n|
  value = redis.lindex(key, n)
  job = Resque.decode(value)
  if job["class"] == class_looking_for && job["args"] == args_looking_for
    redis.lrem(key, value)
    redis.lpush(value)
    break
  end
end

这将遍历redis用于存储给定queue的redis列表中的键,并检查它是否与给定class_looking_forargs_looking_for匹配,根据您的需要调整过滤器( job看起来像{"class"=>"PieCutWorker", "args"=>[42529, "heart shape"]}),一旦找到正确的作业,它将从队列中删除然后附加到它。然后它就可以被下一个可用的工作人员接收了。

但是,如果您需要将此作为系统规则(job "X" always needs to run right away),则最好为该作业创建新队列并将redis worker初始化为

$ QUEUE=important,something,bulk rake resque:work

因为QUEUE参数使用逗号分隔字符串的顺序来定义优先级。