13

特定のジョブのすべてのサイドキク (キュー、再試行、スケジュールなど) を簡単に検索する方法はありますか?

現在、私はこれをやっています:

if !Sidekiq::Queue.new("feeds").find {|j| j.args[0] == feed.id && j.args[1] == true }
  if !Sidekiq::RetrySet.new.find {|j| j.queue == 'feeds' && j.args[0] == feed.id && j.args[1] == true }
    if !Sidekiq::ScheduledSet.new.find {|j| j.queue == 'feeds' && j.args[0] == feed.id && j.args[1] == true }
      feed.sync
    end
  end
end

ただし、キューがどれだけ大きくなる可能性があるかを考えると、反復中にジョブがセット間を移動して見逃される可能性があります。

4

2 に答える 2

7

ジョブを生成した後、ある時点でジョブのステータスを知りたいようですが、その ID も保持しています。まさにそのためのプラグインがいくつかあります。それらは同様の機能を持ち、実質的に同じ名前です。

Sidekiq::Status - 私は最初の作者でしたが、今ではより多くの適切な Ruby 開発者によってサポートされています

SidekiqStatus - 代替手段

[編集] 上記は今では古くなっている可能性があります。Sidekiq の wiki をチェックして、最適なキュー/ステータス管理を見つけてください: https://github.com/mperham/sidekiq/wiki/Related-Projects

于 2013-07-31T21:15:32.587 に答える
4

または、JID を保存したくない場合は、次のようにすることもできます。

ss = Sidekiq::ScheduledSet.new
rs = Sidekiq::RetrySet.new
qs = Sidekiq::Queue.new('feeds')

feed.sync if [ss, rs, qs].all?{ |s| s.none?{ |j| (j.klass == 'SomeWorker') && (j.args[0] == feed.id) && (j.args[1] == true) } }
于 2019-08-23T07:29:42.827 に答える