ruby-on-rails 使用ActiveJob和DelayedJob处理作业失败

eaf3rand  于 2023-03-24  发布在  Ruby
关注(0)|答案(1)|浏览(137)

我的Rails应用程序使用ActiveJob + DelayedJob来执行一些后台作业。
我试图找出定义失败时发生的事情(而不是错误)的方法-这意味着,如果DelayedJob将作业标记为失败,在允许的3次尝试之后,我想执行一些操作。
这是我目前所知道的:

  1. DelayedJob有一个名为failure的钩子。
    1.这个钩子是not supported in ActiveJob
  2. ActiveJob具有rescue_from方法
  3. rescue_from方法可能不是正确的解决方案,因为我不想在 each 异常上做一些事情,而是只在3次尝试之后(阅读:仅在DelayedJob已将作业视为失败之后)。
  4. ActiveJob有一个after_perform钩子,我不能使用它,因为(据我所知)当perform失败时它不会被调用。
    任何帮助都很感激。
guykilcj

guykilcj1#

您可能已经找到了此问题的解决方案,但对于仍在与此问题斗争的人,您可以使用ActiveJob retry_on方法和一个块,以便在达到最大尝试次数但仍失败时运行自定义逻辑。

class RemoteServiceJob < ApplicationJob
  retry_on(CustomAppException) do |job, error|
    ExceptionNotifier.caught(error)
  end
 
 
  def perform(*args)
    # Might raise CustomAppException
  end
end

您可以在https://api.rubyonrails.org/v6.0.3.2/classes/ActiveJob/Exceptions/ClassMethods.html中找到有关ActiveJob中异常处理的更多信息

相关问题