我在一个队列中有一个作业,它的优先级高于该队列中的其他作业。Resque中有没有一种机制可以让我把这个作业移到队列的顶端?
发布于 2014-12-04 10:07:38
如果是临时凹凸,您可以从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使用的redis列表中的键,以存储给定的queue并检查它是否与给定的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因为队列参数使用逗号分隔字符串的顺序来定义优先级。
https://stackoverflow.com/questions/24251541
复制相似问题