2012-03-05 133 views
1

我需要实现一项功能,如果resque作业在特定时间内未得到处理,该功能可以让resque作业超时。如何设置resque作业的超时时间

因此,我们可以说创建了一份工作,但由于排队太长和/或没有足够的工作人员关闭,因此无法在一个小时内处理。

我不想在这种情况下删除工作......最好的办法是什么?也许有一个配置参数,我正在监督或第三方宝石?

感谢

+0

https://rubygems.org/gems/resque-timeout是应该超时工作的宝石。不知道是否删除 – ScottJShea 2012-03-05 01:29:00

+0

已经检查...它杀死长时间运行的resque任务。所以不是我正在寻找的东西:( – Matthias 2012-03-05 01:30:48

回答

1

我不知道是否有一种方法在默认情况下做到这一点的Resque,但它不会是很难做到的自己。

在你的工作做这样的事情:

def perform(id, queued_at) 
    return false unless Time.parse(queued_at) >= 1.hour.ago 

    ... 
end 

而要排队工作,做到:Resque.enqueue(MyJobClass,object.id,DateTime.now)。第一行将自动转储作业,并在作业排队时间超过一小时前阻止作业执行。

+0

谢谢。我们会做这个工作,我只是想知道是否是一个简单的方法来直接从resque访问queued_at字段!? – Matthias 2012-03-05 02:24:27

+0

我很自信Resque doesn' t甚至打扰跟踪queued_at,所以不,除非你自己跟踪它,否则没有办法访问它。 – Veraticus 2012-03-05 02:38:21

+0

好的,谢谢你们 – Matthias 2012-03-05 06:32:36