2013-03-13 35 views
2

我有一個sidekiq工人類。我目前通過這種方式來實現它。它在我調用PROCESS時起作用,它會將名爲PERFORM的方法排隊。但我想有多個方法可以排隊。在sidekiq工人類中有多個方法

作爲一個方面說明,是否有區別做這個,只是做Socialalyr.delay.perform?

# I trigger by using SocialSharer.process("xxx") 

class SocialSharer 

    include Sidekiq::Worker 

    def perform(user_id) 
    # does things 
    end 

    def perform_other_things 
    #i do not know how to trigger this 
    end 

    class << self 
    def process(user_id) 
     Sidekiq::Client.enqueue(SocialSharer,user_id) 
    end 
    end 

end 

回答

5

SocialSharer.delay.perform會延遲名爲perform的類方法。你的執行方法是一個實例方法。

工人被設計爲每個工作一類。作業通過執行方法啓動。您可以使用延遲開球任意數量的不同類方法的一類,像這樣:

class Foo 
    def self.a(count) 
    end 
    def self.b(name) 
    end 
end 
Foo.delay.a(10) 
Foo.delay.b('bob') 
+0

我仍然有從我所說的方法內訪問Rails環境延遲? – holaSenor 2013-03-22 03:32:16

+0

這可以通過延遲作業完成,如何使用Sidekiq做同樣的事情? – 2018-02-16 12:40:36

-3

好吧,如果你真的想在一個類中的所有「可執行」的方法,我建議你perform方法重命名爲不同的東西(比如,perform_something),並創建一個新perform方法,這將派遣控制流:

class SocialSharer 
    include Sidekiq::Worker 

    # the 3 lines below may be replaced with `alias_method :perform, :public_send` 
    def perform(method, *args) 
    self.public_send(method, *args) 
    end 

    def perform_something(user_id) 
    # does things 
    end 

    def perform_other_things 
    # does other things 
    end 

    def self.process(user_id) 
    Sidekiq::Client.enqueue(SocialSharer, :perform_something, user_id) 
    Sidekiq::Client.enqueue(SocialSharer, :perform_other_things) 
    end 
end 
+1

唉,這不是Sidekiq工作人員的工作方式。 – 2013-03-13 22:36:44