Ruby 在sidekiq worker类中有多个方法
我有一个sidekiq工人班。我目前是这样实现的。它在我调用进程时工作,它将对名为PERFORM的方法进行排队。但我希望有不止一种方法可以排队 作为旁注,这样做和简单地做socialshare.delay.perform有区别吗Ruby 在sidekiq worker类中有多个方法,ruby,ruby-on-rails-3,sidekiq,Ruby,Ruby On Rails 3,Sidekiq,我有一个sidekiq工人班。我目前是这样实现的。它在我调用进程时工作,它将对名为PERFORM的方法进行排队。但我希望有不止一种方法可以排队 作为旁注,这样做和简单地做socialshare.delay.perform有区别吗 # I trigger by using SocialSharer.process("xxx") class SocialSharer include Sidekiq::Worker def perform(user_id) # does thin
# 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
#我使用SocialSharer.process(“xxx”)触发
社会共享阶级
包括Sidekiq::Worker
def执行(用户id)
#做事
结束
执行其他任务
#我不知道怎么触发这个
结束
classSocialSharer.delay.perform将延迟名为perform的类方法。您的perform方法是一个实例方法
工人被设计为每个工作一个班。作业通过执行方法启动。您可以使用delay在一个类上启动任意数量的不同类方法,如下所示:
class Foo
def self.a(count)
end
def self.b(name)
end
end
Foo.delay.a(10)
Foo.delay.b('bob')
好的,如果您真的想在一个类中拥有所有“可执行”的方法,我建议您将perform
方法重命名为不同的方法(例如,perform\u 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
我是否仍然可以从延迟调用的方法内部访问rails环境?这可以通过延迟的作业来完成,如何使用Sidekiq实现同样的操作?