同时运行延迟作业和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
库,直到你将所有工作都移到它上面。 意思是避免同时包含两个库,如果可能的话。