Existe-t-il un moyen d'obtenir une liste de tous les travaux actuellement dans la file d'attente et en cours d'exécution? En gros, je veux savoir si un job d'une classe donnée est déjà là, je ne veux pas insérer mon autre job. J'ai vu une autre option mais je veux le faire de cette façon.
Je peux voir ici comment obtenir la liste des travaux dans la file d'attente.
queue = Sidekiq::Queue.new("mailer")
queue.each do |job|
job.klass # => 'MyWorker'
end
d'après ce que je comprends, cela n'inclura pas les travaux de traitement/d'exécution. Une façon de les obtenir?
si vous souhaitez répertorier tous les travaux en cours d'exécution à partir de la console, essayez ceci
workers = Sidekiq::Workers.new
workers.each do |_process_id, _thread_id, work|
p work
end
un work
est un hachage.
pour répertorier toutes les données de file d'attente.
queue = Sidekiq::Queue.all
queue.each do |job|
p job.klass, job.args, job.jid
end
pour une file d'attente spécifique, changez-le en Sidekiq::Queue.new('queue_name')
de même, vous pouvez obtenir tous les travaux planifiés en utilisant Sidekiq::ScheduledSet.new
En supposant que vous ayez passé le hachage comme argument à Sidekiq lorsque vous vous êtes mis en file d'attente.
args = {
"student_id": 1,
"student_name": "Michael Moore"
}
YourWorker.perform_in(1.second,args)
Puis, n'importe où dans votre application, vous pouvez la récupérer comme suit
ss = Sidekiq::ScheduledSet.new
student_id_list = ss.map{|job| job['args'].first["student_id"]}