【问题标题】:Best way to find a job anywhere in Sidekiq在 Sidekiq 任何地方找工作的最佳方式
【发布时间】:2013-06-11 04:24:33
【问题描述】:

是否有一种简单的方法可以在所有 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

但考虑到队列的大小,作业可能会在迭代期间在集合之间移动并错过。

【问题讨论】:

    标签: ruby-on-rails ruby sidekiq


    【解决方案1】:

    似乎您想在生成它后的某个时刻了解您的工作状态,同时您保留它的 ID。有几个插件正是为此而设计的,它们具有相似的功能和几乎相同的名称:

    Sidekiq::Status - 我是它的原作者,现在它得到了更多 Ruby 开发者的支持

    SidekiqStatus - 另一种选择

    [edit] 上面的内容现在可能已经过时了,只需查看 Sidekiq 的 wiki 以找到最适合您的队列/状态管理: https://github.com/mperham/sidekiq/wiki/Related-Projects

    【讨论】:

      【解决方案2】:

      如果您不想存储 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) } }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-05
        • 2013-04-28
        • 2018-10-09
        • 1970-01-01
        • 2020-02-24
        • 1970-01-01
        • 1970-01-01
        • 2018-11-20
        相关资源
        最近更新 更多