使用 Delayed::Job 时使用 ActiveJob 设置优先级
Setting priority with ActiveJob when using Delayed::Job
使用 ActiveJob 入队作业时如何设置延迟作业的优先级?
class GuestsCleanupJob < ApplicationJob
queue_as :high_priority
def perform(*guests)
# Do something later
end
end
花了我一段时间,但我在Delayed::Job文档中找到了这个方法:
Delayed::Worker.queue_attributes = {
default: { priority: 11 },
high_priority: { priority: 1 },
low_priority: { priority: 75 }
}
我已将它添加到我的初始化器中,如果有人遇到它,我只是想分享!
使用 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
定义一个定义优先级的实例方法是可行的,但是不允许我重载该值。
鉴于此 class
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
要遵循 queue_as
的模式,您还可以使用 queue_with_priority
,例如:
class GuestsCleanupJob < ApplicationJob
queue_as :high_priority
queue_with_priority 1
def perform(*guests)
# Do something later
end
end
使用 ActiveJob 入队作业时如何设置延迟作业的优先级?
class GuestsCleanupJob < ApplicationJob
queue_as :high_priority
def perform(*guests)
# Do something later
end
end
花了我一段时间,但我在Delayed::Job文档中找到了这个方法:
Delayed::Worker.queue_attributes = {
default: { priority: 11 },
high_priority: { priority: 1 },
low_priority: { priority: 75 }
}
我已将它添加到我的初始化器中,如果有人遇到它,我只是想分享!
使用 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
定义一个定义优先级的实例方法是可行的,但是不允许我重载该值。 鉴于此 class
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
要遵循 queue_as
的模式,您还可以使用 queue_with_priority
,例如:
class GuestsCleanupJob < ApplicationJob
queue_as :high_priority
queue_with_priority 1
def perform(*guests)
# Do something later
end
end