15

我目前使用延迟作业来异步处理作业。我没有创建工人,而是经常使用这种.delay方法。

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

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

4

3 回答 3

28

对于 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在延迟作业中调用队列。

于 2013-02-20T04:04:37.397 回答
6

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

此处对此进行了描述: https ://github.com/mperham/sidekiq/wiki/Delayed-Extensions

于 2014-05-31T15:42:46.443 回答
0

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

我的建议是为sidekiq每个作业添加库,直到您将所有作业移至其中。意思是避免同时包含两个库,如果可能的话。

于 2012-11-09T12:35:19.627 回答