【问题标题】:Sidekiq retrying old job without terminationSidekiq 重试旧工作而不终止
【发布时间】:2017-08-02 19:12:51
【问题描述】:

我们将工作从 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}"
}

如何清除一类作业的重试队列?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 sidekiq


    【解决方案1】:

    这对我来说适用于大多数 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 }
    

    【讨论】:

    • 感谢您的提示。我在 RetrySet 中找到了我的流氓工作。但是,我不想对整套设备进行核弹。有没有办法让我清除一个子集。 Sidekiq::RetrySet.new.select { |job| /JobA/.match(job.value) }
    • 编辑您的答案以改进解决方案
    • 谢谢@SanjitSaluja 我喜欢你所做的:)
    猜你喜欢
    • 2014-05-28
    • 2015-03-29
    • 2018-06-02
    • 2018-11-05
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 2021-10-31
    • 2013-12-20
    相关资源
    最近更新 更多