2012-11-09 22 views
10

私は現在遅延ジョブを使用してジョブを非同期に処理しています。労働者を作る代わりに、私は.delayメソッドをたくさん使っています。遅延ジョブとSidekiqを同時に実行

私はSidekiqに移りたいですが、私はあまりにも多くの種類のジョブを持っており、すべてがスレッドセーフであることを確認することはできません。ですから、Delayed JobとSidekiqを並行して実行し、一度に1つのタイプのジョブを移行したいと考えています。

遅延ジョブとSidekiqの両方で.delayメソッドが提供されているので、どのように2つの区別ができますか?その他の潜在的な問題はありますか?

答えて

22

以降、どこかRailsの初期化子では、次のように呼び出します。

Sidekiq.hook_rails! 
Sidekiq.remove_delay! 

とあなただけのようにsidekiq_delay方法を接頭辞となります。

official document)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でキューにsidekiq_delayを使用して、delayを呼び出すことができます遅延ジョブにキューイングします。

+0

はありがとう、それは本当に便利です:):行うには、すべてのあなた 必要がこれは、ここで説明されてconfig/initializers/sidekiq.rb

Sidekiq.remove_delay!を追加することです –

0

サイドキックは、すべてのクラスに.delayメソッドを追加するmix-inを持っているようです。これがどのように動作するかは100%ではありませんが、あなたが参照しているdelayがインスタンスレベルにある場合は問題が発生する可能性があります。

あなたの仕事をすべて自分に移すまでは、ジョブごとにsidekiqライブラリを追加することをお勧めします。可能であれば、両方のライブラリを同時に含むことを避けることを意味します。 Sidekiq 2.17.1については

関連する問題