使用延迟作业我想根据错误消息修改 reschedule_at
Using delayed job I want to modify reschedule_at based on error message
使用错误、失败和 reschedule_at 回调有没有办法让 reschedule_at 时间取决于我收到的错误类型?
我已经设置了 reschedule_at 方法,但它会影响该类型的所有作业。我不知道根据错误类型和处理程序在何处处理此行为。
经过一些测试,您似乎可以使用以下方法根据特定作业错误消息进行自定义重新安排:
在作业中定义一个实例变量来保存自定义重试延迟。此变量 将在所有其他变量中序列化到数据库 (或任何其他 DelayedJob 后端),即其状态将在作业运行之间保留。
在 error
挂钩中,根据 exception
参数[=34] 中出现的错误,将延迟设置为任意值 =](这是一个 Exception
对象)。
在 reschedule_at
方法中使用该自定义延迟。
该解决方案利用了 reschedule_at
方法 is called after the error
hook 这一事实。请参阅以下示例:
class MyJob
attr_accessor :retry_delay
def initialize
self.retry_delay = 5 # default retry delay
end
def error(job, exception)
# set up a different the delay time on a specific error
if exception.is_a? NameError
self.retry_delay = 10
end
end
def reschedule_at(current_time, attempts)
current_time + retry_delay.seconds
end
end
使用错误、失败和 reschedule_at 回调有没有办法让 reschedule_at 时间取决于我收到的错误类型?
我已经设置了 reschedule_at 方法,但它会影响该类型的所有作业。我不知道根据错误类型和处理程序在何处处理此行为。
经过一些测试,您似乎可以使用以下方法根据特定作业错误消息进行自定义重新安排:
在作业中定义一个实例变量来保存自定义重试延迟。此变量 将在所有其他变量中序列化到数据库 (或任何其他 DelayedJob 后端),即其状态将在作业运行之间保留。
在
error
挂钩中,根据exception
参数[=34] 中出现的错误,将延迟设置为任意值 =](这是一个Exception
对象)。在
reschedule_at
方法中使用该自定义延迟。
该解决方案利用了 reschedule_at
方法 is called after the error
hook 这一事实。请参阅以下示例:
class MyJob
attr_accessor :retry_delay
def initialize
self.retry_delay = 5 # default retry delay
end
def error(job, exception)
# set up a different the delay time on a specific error
if exception.is_a? NameError
self.retry_delay = 10
end
end
def reschedule_at(current_time, attempts)
current_time + retry_delay.seconds
end
end