【发布时间】:2020-08-30 15:41:13
【问题描述】:
我想编写一个 cron 作业,它从死队列中获取 sidekiq 作业并重试它,因为我们可以从 sidekiq 的 Web UI 中做到这一点,我想通过代码来做同样的事情。
【问题讨论】:
标签: ruby-on-rails sidekiq ruby-on-rails-6 sidekiq-cron
我想编写一个 cron 作业,它从死队列中获取 sidekiq 作业并重试它,因为我们可以从 sidekiq 的 Web UI 中做到这一点,我想通过代码来做同样的事情。
【问题讨论】:
标签: ruby-on-rails sidekiq ruby-on-rails-6 sidekiq-cron
使用Sidekiq::DeadSet 访问死队列,该retry_all method 具有retry_all method。
Sidekiq::DeadSet.new.retry_all
这是对队列中每个作业的迭代并调用retry 的精简包装器。 SideKiq::DeadSet 是Enumerable,因此您可以使用select 和each 等方法。 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)
【讨论】:
Sidekiq::DeadSet 是一个可枚举的。您可以使用普通的可枚举函数,例如 select 和 each。