同时运行Delayed Jobs和Sidekiq

16

我目前使用Delayed Job来异步处理任务。与创建工作进程不同,我经常使用.delay方法。

我想要转移到Sidekiq, 但是我的作业类型太多了,我不能确定它们都是线程安全的。因此我想并行运行Delayed Job和Sidekiq,并逐个迁移一种类型的作业。

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

3个回答

29

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

Sidekiq.hook_rails!
Sidekiq.remove_delay!

对于旧版本的Sidekiq:

将以下内容放入config/initializers/sidekiq.rb文件中,您将只拥有带前缀的sidekiq_delay方法等。

(官方文档)


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将任务加入到Delayed Job队列中。


谢谢,这真的很有帮助 :) - Blue Smith

6

0

看起来Sidekiq有mix-in,可以为所有类添加.delay方法。不太确定它的行为,但如果引用的delay在实例级别上,则可能会导致问题。

我的建议是每个作业都添加sidekiq库,直到将所有作业移动到它。这意味着尽可能避免同时包含两个库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接