2016-08-04 20 views
1

比方說,我有一些PARAMS工人:如何在相關工作人員的參數數量減少後處理已排隊的作業?

class Foo 
    include Sidekiq::Worker 
    sidekiq_options queue: :critical 

    def perform(param1, param2, param3) 
    ... 
    end 
end 

它的工作了一段時間,然後我減輕了工人的參數的個數數:

class Foo 
    include Sidekiq::Worker 
    sidekiq_options queue: :critical 

    def perform(param1, param2) 
    ... 
    end 
end 

但也有一些工作與以往數參數的個數在隊列中仍然。處理這種情況的最佳方法是什麼?

回答

1

這樣做:

def perform(param1, param2, _=nil) 

下劃線是一個約定,意思是「這種說法是不使用的,並忽略「和無默認意味着執行將與2或3個參數一起工作。

一旦排隊舊作業隊列,您可以完全刪除第三個參數。

1

您可能需要排空隊列(並阻止其他作業排入隊列)一段時間,或者您需要取消/刪除這些作業。

您可以取消這些工作,但Sidekiq的作者建議不要這樣做。 sidekiq wiki將其解釋爲:

Sidekiq不提供此功能;這樣做對於應用程序來說更安全,更好。你應該實現這樣的事情:

class MyWorker 
    include Sidekiq::Worker 

    def perform(args) 
    return if cancelled? 
    # do stuff 
    end 

    def cancelled? 
    Sidekiq.redis {|c| c.exists("cancelled-#{jid}") } 
    end 

    def self.cancel!(jid) 
    Sidekiq.redis {|c| c.setex("cancelled-#{jid}", 86400, 1) } 
    end 
end 

的最簡單的辦法是有可能的選擇1

相關問題