使用ActiveJob将作业排入队列时,如何设置延迟作业优先级?
class GuestsCleanupJob < ApplicationJob
queue_as :high_priority
def perform(*guests)
# Do something later
end
end
答案 0 :(得分:4)
我花了一段时间,但我在Delayed :: Job文档中找到了这个方法:
Delayed::Worker.queue_attributes = {
default: { priority: 11 },
high_priority: { priority: 1 },
low_priority: { priority: 75 }
}
我已将此添加到我的初始化程序中,只是想分享是否有其他人遇到此问题!
答案 1 :(得分:2)
定义一个定义优先级的实例方法,但是不允许我重载该值。 鉴于此类
class GuestsCleanupJob < ApplicationJob
queue_as :high_priority
def priority
1
end
def perform(*guests)
# Do something later
end
end
如果我运行
GuestsCleanupJob.set(priority: 55).perform_later(user, lead) # priority set to 1 not 55
它将优先级为1的作业排队,而忽略我通过的55。
那没有为我的用例提供足够的控制,所以我做了。
class GuestsCleanupJob < ApplicationJob
queue_as :high_priority
def default_priority
1
end
def priority
@priority || default_priority
end
def perform(*guests)
# Do something later
end
end
使用上面的代码,默认情况下,优先级将设置为1,但是我可以使用我的
GuestsCleanupJob.set(priority: 55).perform_later(user, lead) # priority set to 55
答案 2 :(得分:0)
使用Delayed :: Worker.queue_attributes的解决方案,看起来还可以,并且已经有文档记录,但是对我来说不起作用... 不管在queue_attributes中设置的队列优先级如何,所有作业的优先级均为0。 这对我有用:
class GuestsCleanupJob < ApplicationJob
queue_as :high_priority
def priority
1
end
def perform(*guests)
# Do something later
end
end