2016-09-29 64 views
0

是否建議刪除或殺死中間件內的失敗作業?我無法在wiki中找到關於此事的任何文檔。 FWIW,我正在使用sidekiq-pro。Sidekiq刪除或殺死中間件內的作業

我注意到的一件事是即使我有正確的工作ID,工作並沒有被殺死。當隊列入隊時,sidekiq作業是否可能被分配了不同的ID?

STATUSES = { 
    canceled:  6, 
    failure:   9, 
    expired:   10 
}.freeze 

def call(worker, message, queue) 
    key = message['args'][0] 
    jid = message['jid'] 

    if key.present? 
    // status_id fetched from database 
    status_id = Req.find(key).status 

    if STATUSES.values.include?(status_id) 
     if killable?(message) 
     job = Sidekiq::RetrySet.new.find_job(jid) 
     // kill doesn't always succeed because job cannot be found 
     job.kill 
     end 
    end 
    end 
    yield 
end 

def killable?(message) 
    message.key?('retry_count') 
end 

回答

1

無需'殺死'該作業,只是返回而不是屈服。這份工作會默默成功,而不會執行任何事情。您可以使用此方法作爲參考的作業發送到死的隊列:

https://github.com/mperham/sidekiq/blob/master/lib/sidekiq/middleware/server/retry_jobs.rb#L151

+0

感謝您迴應邁克,我想知道你們什麼時候出現:d 但在這種情況下,我需要殺死這個工作,因爲我們不想在重試隊列中使用它。如果獲得這些狀態,它將不會成功。 – hyde

+0

啊我明白你的意思,所以這意味着它也應該從重試隊列中消失。我會給你一個鏡頭並向你報告。 – hyde

+0

將作業從重試集移至隊列以供執行。沒有什麼可以從重試集中刪除。 –