同时运行延迟作业和Sidekiq

我目前使用延迟作业来异步处理作业。 我没有使用.delay方法,而是使用.delay方法。

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

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

对于Sidekiq 2.17.1及更高版本,在Rails初始化程序的某处,请调用以下内容:

 Sidekiq.hook_rails! Sidekiq.remove_delay! 

并且你将只有前缀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 

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

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

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

似乎Sidekiq有混合使用 .delay方法为所有类添加.delay方法。 不是100%确定这将如何表现,但如果您在引用的delay是在实例级别,它可能会导致问题。

我的建议是在每个工作中添加sidekiq库,直到你将所有工作都移到它上面。 意思是避免同时包含两个库,如果可能的话。