我使用 Rails 4.2 和delayed_job 4.0.6 作为我的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,那就更好了。