我正在运行Rails 5.1,Ruby 2.5,Sidekiq。我已经设置了一个简单的用例:
class RetryJobException < Exception
end
class CustomJob < ActiveJob::Base
retry_on RetryJobException, wait: 3.seconds, attempts: 2 do
puts "RETRYING"
end
def perform(*args)
raise RetryJobException
end
end
字符串
这里发生的是,当我运行这个作业并引发RetryJobException
时,CustomJob
会在30秒后重新运行(而不是三次......),不确定次数(而不是2次),直到我杀死Sidekiq的进程。“RETRYING”从未打印在任何地方,这表明retry_on
块中的代码从未执行过。
根据documentation,这应该是一个基本的用例,然而,我遇到了这些问题。我做错了什么?
2条答案
按热度按时间hxzsmxv21#
这对我很有效:
字符串
xpcnnkqh2#
仔细阅读文档后,我发现:
您还可以传递一个块,如果自定义逻辑的重试尝试失败,而不是让异常冒泡,则将调用该块。该块以作业示例作为第一个参数,错误示例作为第二个参数产生。
retry_on允许在重试尝试用尽后传递一个块来处理异常。
我的方案是在作业失败时通知我,
rescue_from
似乎解决了我的问题字符串