2014-09-01 62 views
0

創建sidekiq工人爲以下和exec它Sidekiq無死角的工作中發現

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工人將拋出由於1/0異常。但經過一次重試,我沒有看到這份工作在sidekiq web ui的死氣沉沉的工作中。

所以任何人都可以解釋我或爲此提供任何想法。

感謝

+0

來自wiki:[最佳實踐](https://github.com/mperham/sidekiq/wiki/Error-Handling#best-practices) Sidekiq在嘗試運行25次後會將作業移至死鎖隊列。不是在那之前。 – Vinay 2014-09-01 13:49:47

+0

Vinay,當重試耗盡時,Sidekiq會將其移至DJQ。他明確地配置它只使用1次重試。 – 2014-09-02 04:07:41

+0

sidekiq日誌說什麼? – 2014-09-02 04:09:54

回答

1

在日誌文件中,我發現這行:

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

,然後我谷歌和去所以鏈接https://github.com/mperham/sidekiq/issues/1915

,我一樣mperham導遊加入

require 'sidekiq/api' 

它工作正常,失敗的工作出現在無效工作隊列中

0

只是一個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( '名字1',1)

欲瞭解更多信息,請參閱https://github.com/mperham/sidekiq/wiki/Error-Handling