Search code examples
rubyruby-on-rails-3sidekiq

Having more than one method in a sidekiq worker class


I have a sidekiq worker class. I currently implemented it this way. It works when I call PROCESS, and it will queue the method called PERFORM. But i would like to have more than one method that I can queue.

As a side note, is there a difference doing this and simply doing SocialSharer.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

Solution

  • SocialSharer.delay.perform would delay a class method called perform. Your perform method is an instance method.

    Workers are designed to be one class per job. The job is started via the perform method. You can use delay to kick off any number of different class methods on a class, like so:

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