Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Run Delayed Jobs and Sidekiq at the same time

I currently use delayed job to process jobs asynchronously. Instead of creating workers, I use the .delay method a lot.

I want to move to Sidekiq, but I have too many types of jobs, and can't make sure all of them are thread safe. So I want to run Delayed Job and Sidekiq in parallel, and migrating one type of job at a time.

Since both Delayed Job and Sidekiq offers the .delay method, how can I make the distinction between the two? Are there any other potential issues?

like image 737
lulalala Avatar asked Nov 09 '12 10:11

lulalala


2 Answers

For Sidekiq 2.17.1 and later, somewhere in the Rails initializers, call the following:

Sidekiq.hook_rails!
Sidekiq.remove_delay!

and you will have only prefixed sidekiq_delay methods and so on.

(official document)


For older versions of Sidekiq:

Put the following in config/initializers/sidekiq.rb

module Sidekiq::Extensions::Klass
  alias :sidekiq_delay :delay
  remove_method :delay
  alias :sidekiq_delay_for :delay_for
  remove_method :delay_for
  alias :sidekiq_delay_until :delay_until
  remove_method :delay_until
end

module Sidekiq::Extensions::ActiveRecord
  alias :sidekiq_delay :delay
  remove_method :delay
  alias :sidekiq_delay_for :delay_for
  remove_method :delay_for
  alias :sidekiq_delay_until :delay_until
  remove_method :delay_until
end

module Sidekiq::Extensions::ActionMailer
  alias :sidekiq_delay :delay
  remove_method :delay
  alias :sidekiq_delay_for :delay_for
  remove_method :delay_for
  alias :sidekiq_delay_until :delay_until
  remove_method :delay_until
end

And then you can use sidekiq_delay to queue in Sidekiq, and call delay to queue in Delayed Job.

like image 99
lulalala Avatar answered Oct 05 '22 15:10

lulalala


For anyone searching for this. I did find Sidekiq now has a setting for this out of the box. All you need to do is add Sidekiq.remove_delay! to config/initializers/sidekiq.rb

This is described here: https://github.com/mperham/sidekiq/wiki/Delayed-Extensions

like image 21
Mike O'Toole Avatar answered Oct 05 '22 14:10

Mike O'Toole