问题描述
我们有一个工作程序,该工作程序有一个错误,导致对所调用方法的错误响应。此问题已得到解决,但是当我们重新启动后台工作程序时,我们似乎仍然会遇到该问题。
我们知道问题已解决,因为与此同时,我们已将逻辑移至rake任务,并且现在工作正常。我们怀疑该问题与sidekiq队列中的失败或未完成的作业有关。
Sidekiq.redis { |r| puts r.flushall }
在使用Sidekiq / Redis时,有人遇到过类似的问题吗?您是怎么想到的?
解决方法
我认为flushall可能会立即重试所有仍然失败但仍在排队的作业
在大多数情况下,如果在不更改签名的情况下修复了工作程序中的错误,则可以让他们重试(假设作业本身是幂等的,因此建议这样做)和其他)。
但是,如果错误在于您传递给异步作业的内容,那么您将必须删除所有这些条目,因为它们每次重试时都会继续失败,默认情况下,可以持续数周。
我认为您想要做的就是清除所有内容...您可以针对特定队列执行此操作。如果这是一个问题,您可能要小心,不要通过检查作业条目来删除新排队的作业。如果您只想对所有内容进行核对:
queue = Sidekiq::Queue.new('your_queue')
queue.clear