是否有一种简单的方法可以搜索特定作业的所有sidekiq(队列,重试,日程安排等)?
目前我正在这样做:
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
但考虑到队列有多大,在迭代过程中作业可能会在各组之间移动并被遗漏。
答案 0 :(得分:5)
似乎你想在产生它之后的某个时刻知道你的工作状态,你也保持其身份。有一些插件正是为了它们,它们具有相似的功能和几乎相同的名称:
Sidekiq::Status - 我是它的原始作者,现在它得到了更多的Ruby开发人员的支持
SidekiqStatus - 另类
[编辑]以上内容可能已经过时,只需检查Sidekiq的wiki即可找到最适合您的队列/状态管理: https://github.com/mperham/sidekiq/wiki/Related-Projects
答案 1 :(得分:0)
或者,如果您不想存储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) } }