Sidekiq列出所有工作[排队+运行]

时间:2018-01-19 20:05:40

标签: ruby-on-rails ruby sidekiq

有没有办法获取当前队列中正在运行的所有作业的列表?基本上,我想知道给定班级的工作是否已经存在,我不想插入我的其他工作。我见过其他选择,但我想这样做。

我可以看到here如何获取队列中的作业列表。

queue = Sidekiq::Queue.new("mailer")
queue.each do |job|
  job.klass # => 'MyWorker'
end

据我所知,这不包括处理/运行的工作。有什么方法可以得到它们吗?

3 个答案:

答案 0 :(得分:13)

如果要从控制台列出所有当前正在运行的作业,请尝试此

workers = Sidekiq::Workers.new
workers.each do |_process_id, _thread_id, work|
  p work
end

work是哈希。

列出所有队列数据。

queue = Sidekiq::Queue.all
queue.each do |job|
  p job.klass, job.args, job.jid
end

对于特定队列,将其更改为Sidekiq::Queue.new('queue_name')

同样,您可以使用Sidekiq::ScheduledSet.new

获取所有预定作业

答案 1 :(得分:5)

正在运行的作业:

Sidekiq::Workers.new.each do |_process_id, _thread_id, work|
  p work
end

所有队列中排队的作业:

Sidekiq::Queue.all.each do |queue|
  # p queue.name, queue.size
  queue.each do |job|
    p job.klass, job.args
  end
end

答案 2 :(得分:0)

假设您在排队时将哈希作为参数传递给Sidekiq。

args = {
  "student_id": 1,
  "student_name": "Michael Moore"
    }

YourWorker.perform_in(1.second,args)

然后在您的应用程序中的任何位置,您都可以按以下方式检索它

      ss = Sidekiq::ScheduledSet.new
      student_id_list = ss.map{|job| job['args'].first["student_id"]}