我有一个永远在跑的工人。
class Worker
include Sidekiq::Worker
sidekiq_options queue: "infinity", retry: true
def perform(params)
# ...
self.class.perform_in(30.seconds, params)
end
end
问题是我在启动时加载工人,像这样
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
。
这意味着旧的工人停止,无论是那些目前正在运行,而且那些正在重新安排。
我尝试在启动时运行它(就在加载新作品之前) ,但是不起作用。
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 部署之后,队列中有一大堆重复的工作者,这些工作者将安排在以后。那么,是否有办法清除一个队列中的所有内容,并防止已经运行的作业重新调度?
I'm using sidekiq 3.0.