有没有办法获取当前队列中正在运行的所有作业的列表?基本上,我想知道给定班级的工作是否已经存在,我不想插入我的其他工作。我见过其他选择,但我想这样做。
我可以看到here如何获取队列中的作业列表。
queue = Sidekiq::Queue.new("mailer")
queue.each do |job|
job.klass # => 'MyWorker'
end
据我所知,这不包括处理/运行工作。有什么方法可以得到它们?
如果要从控制台列出所有当前正在运行的作业,请尝试此操作
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
获得所有预定的工作
假设你入队时把哈希作为参数传给了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"]}