【问题标题】:How to set a timeout for resque jobs如何为 resque 作业设置超时
【发布时间】:2012-03-05 20:56:30
【问题描述】:

我需要实现一个功能,让 resque 作业在特定时间内未处理时超时。

因此,假设创建了一个作业,但由于队列太长和/或没有足够的工人处理它们而无法在一小时内处理。

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

谢谢

【问题讨论】:

  • rubygems.org/gems/resque-timeout 是一个应该让工作超时的宝石。不确定它是否会删除
  • 已经检查过...它会杀死长时间运行的 resque 任务。所以不是我想要的:(

标签: ruby-on-rails ruby resque


【解决方案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)。如果排队时间超过一个小时,第一行将自动转储作业并阻止其执行。

【讨论】:

  • 谢谢。我们会完成这项工作。我只是想知道这是否是一种直接从 resque 访问 queued_at 字段的简单方法!?
  • 我非常有信心 Resque 甚至不会打扰跟踪 queued_at,所以不,除非您自己跟踪,否则无法访问它。
  • 我必须添加 .to_s: Time.parse(queued_at.to_s)
猜你喜欢
  • 2016-05-30
  • 2016-10-15
  • 2015-10-27
  • 2010-11-15
  • 2014-03-21
  • 2013-04-19
  • 1970-01-01
  • 2017-12-10
  • 2013-12-04
相关资源
最近更新 更多