首页 > 解决方案 > 是什么让 sidekiq 工作人员产生错误甚至不可能的方法响应

问题描述

我们有一个 Worker,它有一个错误,导致对被调用的方法做出错误的响应。该问题已得到解决,但是当我们重新启动后台工作人员时,我们似乎仍然遇到该问题。

我们知道问题已解决,因为与此同时,我们已将逻辑移至 rake 任务,它现在工作正常。我们怀疑该问题与 sidekiq 队列中的失败或未执行的作业有关。

我们试图通过使用以下方法清除 redis 数据库来克服这个问题:

Sidekiq.redis { |r| puts r.flushall }

有没有人在使用 Sidekiq/Redis 时遇到过类似的问题,你是怎么解决的?

标签: ruby-on-railsrubyredissidekiq

解决方案


我认为 flushall 可能会立即重试所有仍然失败但仍在排队的作业

在大多数情况下,如果您在不更改签名的情况下修复了工作程序中的错误,您可能可以让他们重试(假设作业本身是幂等的,出于这个原因和其他原因有点推荐)。

但是,如果错误出在您传递给异步作业调用的内容中,那么您将必须删除所有这些条目,因为每次重试它们都会继续失败,默认情况下,可能会持续数周。

我认为您想要做的是清除所有这些...您可以为特定队列执行此操作。如果这是一个问题,您可能必须小心不要删除新排队的作业,也许通过检查作业条目。如果您只想对它们进行核对:

queue = Sidekiq::Queue.new('your_queue')
queue.clear

推荐阅读