2
我在隊列中有一個比該隊列中的其他作業具有更高優先級的作業。 Resque中是否有一種機制可以將此作業移至隊列頂部?在Resque中,是否有辦法將作業碰到隊列頂部?
我在隊列中有一個比該隊列中的其他作業具有更高優先級的作業。 Resque中是否有一種機制可以將此作業移至隊列頂部?在Resque中,是否有辦法將作業碰到隊列頂部?
如果它是一個即興碰你可以使用Redis的從一個的Ruby/Rails控制檯
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的工人
$ QUEUE=important,something,bulk rake resque:work
作爲隊列PARAM使用順序用逗號分隔字符串來定義優先級。