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?
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With