我正在使用Rails 4.2和delayed_job 4.0.6作为我的ActiveJob后端。
我有一个工作,希望只允许在队列中出现一次。该作业需要超过一分钟的时间才能运行。它是由模型上的回调函数排队的。这个回调会比工作完成得多得多。未来不需要再将该工作排队超过一次。
以下是我尝试实现的伪代码。
如果在再次调用时作业的实例正在运行,则仍应将其排队等待未来运行。我正在寻找一种方式,使作业最多只能被排队等待1次未来运行。
我认为答案必须是针对delayed_job具体而言,但如果可以推广到ActiveJob那就更好了。
我有一个工作,希望只允许在队列中出现一次。该作业需要超过一分钟的时间才能运行。它是由模型上的回调函数排队的。这个回调会比工作完成得多得多。未来不需要再将该工作排队超过一次。
以下是我尝试实现的伪代码。
# app/jobs/refresh_account_cache_job.rb
class RefreshAccountCacheJob < ActiveJob::Base
def before_enqueue
skip if job_already_enqueued
end
def perform
Account.write_to_cache
end
def job_already_enqueued
# ?
end
end
如果在再次调用时作业的实例正在运行,则仍应将其排队等待未来运行。我正在寻找一种方式,使作业最多只能被排队等待1次未来运行。
我认为答案必须是针对delayed_job具体而言,但如果可以推广到ActiveJob那就更好了。