我在之前的代码中使用 resque-scheduler 来延迟作业:
Resque.enqueue_in(options[:delay].seconds, self, context)
现在我想包括 resque-status 来完成这项工作,但不知道它们如何一起工作。最新的 resque-status 源码支持调度器,如源码中:
https://github.com/quirkey/resque-status/blob/master/lib/resque/plugins/status.rb
# Wrapper API to forward a Resque::Job creation API call into a Resque::Plugins::Status call.
# This is needed to be used with resque scheduler
# http://github.com/bvandenbos/resque-scheduler
def scheduled(queue, klass, *args)
self.enqueue_to(queue, self, *args)
end
结尾
但我不确定如何使用它。我应该只调用 SampleJob.scheduled(queue, myclass, :delay => delay) 而不是 SampleJob.create(options) 吗?
==================================================== =====================
此外,还支持 resque-status(和其他自定义作业):
https://github.com/bvandenbos/resque-scheduler
一些 Resque 扩展,如 resque-status 使用 API 签名略有不同的自定义作业类。Resque-scheduler 并不试图支持所有现有和未来的自定义作业类,而是支持调度标志,因此您可以扩展自定义类并使其支持预定作业。
假设我们有一个名为 FakeLeaderboard 的 JobWithStatus 类
class FakeLeaderboard < Resque::JobWithStatus
def perform
# do something and keep track of the status
end
end
然后是一个时间表:
create_fake_leaderboards:
cron: "30 6 * * 1"
queue: scoring
custom_job_class: FakeLeaderboard
args:
rails_env: demo
description: "This job will auto-create leaderboards for our online demo and the status will update as the worker makes progress"
但它似乎只适用于经常性工作。我可以找到 cron 的参数,但不能找到延迟。那么我该如何处理延迟的工作呢?
谢谢!