2012-11-09 6 views
10

Ich verwende derzeit verzögerten Job, um Jobs asynchron zu verarbeiten. Anstatt Mitarbeiter zu erstellen, verwende ich die .delay Methode sehr.Verzögerte Jobs und Sidekiq gleichzeitig ausführen

Ich möchte zu Sidekiq, aber ich habe zu viele Arten von Jobs, und kann nicht sicherstellen, dass alle von ihnen threadsicher sind. Daher möchte ich Delayed Job und Sidekiq parallel ausführen und jeweils einen Jobtyp migrieren.

Da sowohl der verzögerte Job als auch Sidekiq die .delay-Methode anbietet, wie kann ich die beiden unterscheiden? Gibt es andere mögliche Probleme?

Antwort

22

Für Sidekiq 2.17.1 und später irgendwo in den Rails initializers, rufen:

Sidekiq.hook_rails! 
Sidekiq.remove_delay! 

und Sie haben das Präfix nur sidekiq_delay Methoden und so weiter.

(official document)


Für ältere Versionen von Sidekiq:

die in folgenden Put 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 

Und dann können Sie sidekiq_delay in Sidekiq Warteschlange verwenden, und rufen delay im verzögerten Job anstehen.

+0

Vielen Dank, es ist wirklich hilfreich :) –

0

Es scheint, dass Sidekiq hat mix-in, die .delay Methoden zu allen Klassen hinzugefügt. Nicht 100% sicher, wie sich dies verhält, aber es könnte zu Problemen führen, wenn delay, auf das Sie verweisen, auf Instanzebene liegt.

Mein Rat wäre, sidekiq Bibliothek pro Job hinzufügen, bis Sie alle Ihre Jobs dorthin verschoben haben. Bedeutung, um zu vermeiden, beide Bibliotheken zur gleichen Zeit wieder aufzunehmen, wenn möglich. die folgende

4

Für alle, die danach suchen. Ich fand Sidekiq hat jetzt eine Einstellung für diese out of the box. Alles, was Sie Notwendigkeit zu tun ist hinzuzufügen Sidekiq.remove_delay! zu config/initializers/sidekiq.rb

Dieses hier beschrieben wird: https://github.com/mperham/sidekiq/wiki/Delayed-Extensions