【问题标题】:Sidekiq no dead jobs were foundSidekiq 没有找到死的工作
【发布时间】:2014-10-25 13:26:14
【问题描述】:

我创建 sidekiq worker 如下并执行它

require 'sidekiq'

class HardWorker
    include Sidekiq::Worker
    sidekiq_options :queue => 'crawler'

    def perform(name, count)
        logger.info "#{name}: #{count}"
        puts 'Doing hard work'
        puts 1/0
    end
end

然后,通过运行此代码将作业排入队列:

Sidekiq::Client.push({'class' => 'HardWorker', 'queue' => 'crawler', 'args' => ['name 1', 1], 'retry' => 1})    

当然,sidekiq worker 会因为 1/0 抛出异常。但是重试一次后,我在sidekiq web ui的死工作中看不到这个工作。

那么任何人都可以解释我或为此提供任何想法。

谢谢

【问题讨论】:

  • 来自维基:best practices Sidekiq 在尝试运行 25 次后会将作业移至死队列。不是在那之前。
  • Vinay,Sidekiq 会在重试次数用尽时将其移至 DJQ。他显然将其配置为仅使用 1 次重试。
  • sidekiq 日志说什么?
  • 啊,我的错。没有看到推送参数
  • 感谢@MikePerham,通过查看日志文件中的错误,我找到了正确的问题

标签: sidekiq sidekiq-monitor


【解决方案1】:

在日志文件中,我找到了这一行:

uninitialized constant Sidekiq::Middleware::Server::RetryJobs::DeadSet

然后,我谷歌并转到链接https://github.com/mperham/sidekiq/issues/1915

所以,我添加了

require 'sidekiq/api'

它工作正常,失败的作业出现在死作业队列中

【讨论】:

    【解决方案2】:

    只是用 sidekiq 做事的更好方法,不确定这是否能解决问题,但这值得一试 hard_worker.rb

    require 'sidekiq'
    class HardWorker
      include Sidekiq::Worker
      sidekiq_options queue: 'crawler', retry: 1
    
      def perform(name, count)
        logger.info "#{name}: #{count}"
        puts 'Doing hard work'
        puts 1/0
      end
    end
    

    将作业排入队列 HardWorker.peform_async('name 1', 1)

    更多信息请参考https://github.com/mperham/sidekiq/wiki/Error-Handling

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-20
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 2012-09-30
      • 2019-01-24
      • 2014-07-31
      • 2018-01-02
      相关资源
      最近更新 更多