首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清除sidekiq队列

清除sidekiq队列
EN

Stack Overflow用户
提问于 2014-04-18 05:27:24
回答 4查看 87.7K关注 0票数 112

我有一个永远在运行的工人。

代码语言:javascript
复制
class Worker
  include Sidekiq::Worker
  sidekiq_options queue: "infinity", retry: true

  def perform(params)
    # ...
    self.class.perform_in(30.seconds, params)
  end
end

问题是我在启动时加载工人,就像这样。config/initializers/load_workers.rb

代码语言:javascript
复制
Rails.application.config.after_initialize do  
  if ENV["SIDEKIQ"] == "1"
    Worker.perform_async({})
  end
end

用这个来启动sidekiq SIDEKIQ=1 sidekiq --verbose --environment production -C config/sidekiq.yml

这意味着老员工将停止工作,既包括那些正在运行的员工,也包括那些正在重新安排日程的员工。

我试着在启动时运行它(就在加载新作品之前),但不起作用。

代码语言:javascript
复制
q = []
q += Sidekiq::RetrySet.new.select { |job| job.klass.match(/Worker/) }
q += Sidekiq::Queue.new("infinity").select { |job| job.klass.match(/Worker/) }
q += Sidekiq::ScheduledSet.new.select { |job| job.klass.match(/Worker/) }
q.each(&:delete)

在5-ish部署之后,队列中有一堆重复的工作进程。那么,有没有一种方法可以清除一个队列中的所有内容,并防止已经在运行的作业重新调度?

我使用的是sidekiq 3.0。

EN

回答 4

Stack Overflow用户

发布于 2014-05-15 18:17:15

通过删除队列来删除队列中的所有作业。

代码语言:javascript
复制
require 'sidekiq/api' # for the case of rails console

Sidekiq::Queue.new("infinity").clear
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear
票数 174
EN

Stack Overflow用户

发布于 2017-11-15 00:03:23

这将清除所有队列、计划和重试:

代码语言:javascript
复制
require 'sidekiq/api'
Sidekiq::Queue.all.each(&:clear)
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear
Sidekiq::DeadSet.new.clear
票数 133
EN

Stack Overflow用户

发布于 2016-07-30 17:00:26

适用于我的大多数sidekiq版本:

代码语言:javascript
复制
Sidekiq::RetrySet.new.clear

Sidekiq::ScheduledSet.new.clear

清除统计信息(可选)

代码语言:javascript
复制
Sidekiq::Stats.new.reset
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23143766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档