最多尝试1次的作业?

我有一个我异步运行的方法

User.delay(queue: 'users').grab_third_party_info(user.id)

如果失败,我希望它不会重试。 我的默认重试次数是3次,这是我无法改变的。 我只想让这只能尝试一次。 以下似乎不起作用:

User.delay(queue: 'users', attempts: 3).grab_third_party_info(user.id)

有任何想法吗?


这不是我最喜欢的解决方案,但是如果您需要使用延迟方法,您可以设置尝试次数:减少最大尝试次数。 所以在你的情况下,以下应该工作

User.delay(queue: 'users', attempts: 2).grab_third_party_info(user.id)

更好的是,你可以通过使用Delayed :: Worker.max_attempts来使它更安全

User.delay(queue: 'users', attempts: Delayed::Worker.max_attempts-1).grab_third_party_info(user.id)

这会将它输入到您的delayed_jobs表中,就好像它已经运行了两次,所以当它再次运行时,它将处于最大尝试次数。


从https://github.com/collectiveidea/delayed_job#custom-jobs

要设置每个作业的最大尝试次数来覆盖Delayed :: Worker.max_attempts,您可以在作业上定义一个max_attempts方法

NewsletterJob = Struct.new(:text, :emails) do
  def perform
    emails.each { |e| NewsletterMailer.deliver_text_to_email(text, e) }
  end

  def max_attempts
    3
  end
end

这对你有帮助吗?

链接地址: http://www.djcxy.com/p/84759.html

上一篇: job with max attempts of 1?

下一篇: jQuery change event not working in IE11