【问题标题】:Retry sidekiq job if it is in dead queue in rails如果 sidekiq 作业在 Rails 中处于死队列中,请重试它
【发布时间】:2020-08-30 15:41:13
【问题描述】:

我想编写一个 cron 作业,它从死队列中获取 sidekiq 作业并重试它,因为我们可以从 sidekiq 的 Web UI 中做到这一点,我想通过代码来做同样的事情。

【问题讨论】:

    标签: ruby-on-rails sidekiq ruby-on-rails-6 sidekiq-cron


    【解决方案1】:

    使用Sidekiq::DeadSet 访问死队列,该retry_all method 具有retry_all method

    Sidekiq::DeadSet.new.retry_all
    

    这是对队列中每个作业的迭代并调用retry 的精简包装器。 SideKiq::DeadSet 是Enumerable,因此您可以使用selecteach 等方法。 wiki page has a good example

    ds = Sidekiq::DeadSet.new
    
    # Retry only jobs of FixedWorker class whose first argument is 123.
    ds.select { |job|
      job.klass == 'FixedWorker' && job.args[0] == 123
    }.map(&:retry)
    

    【讨论】:

    • 但是我不想全部重试,而是我想先检查它的参数,然后为每个作业重试,所以如果要单独重试,我该怎么办??
    • 请阅读 API wiki 页面。 github.com/mperham/sidekiq/wiki/API#dead
    • @PujaGarg Sidekiq::DeadSet 是一个可枚举的。您可以使用普通的可枚举函数,例如 selecteach
    猜你喜欢
    • 2013-06-16
    • 2018-09-27
    • 2016-03-01
    • 2020-12-13
    • 1970-01-01
    • 2016-03-25
    • 2013-11-14
    • 2014-12-03
    • 2015-07-06
    相关资源
    最近更新 更多