我在队列中的工作优先级高于该队列中的其他工作。 Resque中是否有一种机制可以将此作业移动到队列的顶部?
答案 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_for
和args_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参数使用逗号分隔字符串的顺序来定义优先级。