同时运行延迟作业和Sidekiq

lul*_*ala 14 ruby delayed-job ruby-on-rails-3 sidekiq

我目前使用延迟作业来异步处理作业.我没有创建工人,而是使用.delay了很多方法.

我想转移到Sidekiq,但是我有太多类型的工作,并且不能确保它们都是线程安全的.所以我想并行运行Delayed Job和Sidekiq,并一次迁移一种类型的作业.

由于Delayed Job和Sidekiq都提供了这种.delay方法,我如何区分这两者?还有其他潜在问题吗?

lul*_*ala 27

对于Sidekiq 2.17.1及更高版本,在Rails初始值设定项中的某处,请调用以下内容:

Sidekiq.hook_rails!
Sidekiq.remove_delay!
Run Code Online (Sandbox Code Playgroud)

你将只有前缀sidekiq_delay方法等等.

(官方文件)


对于较旧版本的Sidekiq:

把以下内容放入 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
Run Code Online (Sandbox Code Playgroud)

然后您可以使用sidekiq_delay在Sidekiq中排队,并delay在延迟作业中调用队列.


Mik*_*ole 5

对于任何寻找此的人.我确实发现Sidekiq现在有一个开箱即用的设置.所有你需要做的就是添加Sidekiq.remove_delay!config/initializers/sidekiq.rb

这在这里描述:https: //github.com/mperham/sidekiq/wiki/Delayed-Extensions