Sidekiq 在不终止的情况下重试旧工作

Sidekiq retrying old job without termination

我们将作业从 JobA 重命名为 JobB。部署更改时,队列中有一些作业。现在旧的 Job 不断被重试并不断失败。下面这个工作实际上是在 3 周前排队的,Sidekiq 仍在重试。

{
  "context": "Job raised exception",
  "job": {
    "args": [
      5105
    ],
    "class": "JobA",
    "created_at": 1499822416.4738095,
    "enqueued_at": 1499822417.145876,
    "jid": "b32957f3e0ad6b89b1331e46",
    "queue": "default",
    "retry": true
  },
  "jobstr": "{\"class\":\"JobA\",\"args\":[5105],\"retry\":true,\"queue\":\"default\",\"jid\":\"b32957f3e0ad6b89b1331e46\",\"created_at\":1499822416.4738095,\"enqueued_at\":1499822417.145876}"
}

如何清除 class 个作业的重试队列?

这对我来说适用于大多数 sidekiq 版本:

Sidekiq::RetrySet.new.clear

Sidekiq::ScheduledSet.new.clear

清除统计数据

Sidekiq::Stats.new.reset

清除特定作业

rogue = Sidekiq::RetrySet.new.select { |job| /JobA/.match(job.value) }
rogue.each { |job| job.delete }