使用 ActiveJob 和 DelayedJob 对作业失败执行操作



我的 Rails 应用程序正在使用 ActiveJob + DelayedJob 来执行一些后台作业。

我正在尝试弄清楚定义失败(而不是错误(时会发生什么的方法 - 这意味着,如果 DelayedJob 将作业标记为失败,在允许的 3 次尝试之后,我想执行一些操作。

这是我目前所知道的:

  1. DelayedJob 有一个恰当的名字failure钩子。
  2. 活动作业不支持此挂钩
  3. ActiveJob 有一个rescue_from方法
  4. rescue_from方法可能不是正确的解决方案,因为我不想在每个异常上做某事,而是只在 3 次尝试后(阅读:仅在 DelayedJob 认为作业失败之后(。
  5. ActiveJob 有一个after_perform钩子,我无法使用它,因为(据我所知(当perform失败时不会调用它。

任何帮助,不胜感激。

您可能已经找到了解决此问题的方法,但对于仍在为此问题而苦苦挣扎的人,您可以将 ActiveJobretry_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异常处理的详细信息

最新更新