web-dev-qa-db-ja.com

Sidekiqはすべてのジョブをリストします[キュー+実行中]

現在キューにあり実行中のすべてのジョブのリストを取得する方法はありますか?基本的に、特定のクラスのジョブが既に存在するかどうかを知りたいのですが、他のジョブを挿入したくありません。私は他のオプションを見てきましたが、この方法でやりたいです。

here キュー内のジョブのリストを取得する方法を見ることができます。

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

私が理解していることから、これにはジョブの処理/実行は含まれません。それらを取得する方法はありますか?

9
aks

現在実行中のすべてのジョブをコンソールから一覧表示する場合は、これを試してください

_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_を使用してすべてのスケジュール済みジョブを取得できます

16
Haseeb Eqx

エンキュー時に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"]}
1
zawhtut