2013-12-10 13 views

Odpowiedz

4

można zdefiniować zależności pracę za pomocą Sidekiq Superworker:

# config/initializers/superworkers.rb 
Superworker.create(:MySuperworker, :user_id) do 
    Worker1 :user_id 
    Worker2 :user_id 
end 

# Anywhere 
MySuperworker.perform_async(123) 

Po uruchomieniu MySuperworker, Worker1 rozpocznie. Kiedy się skończy, Worker2 zacznie. Pozwala to oddzielić wykres zależności od samych pracowników. (Zrzeczenie się: jestem autorem klejnotu).

5

Używając tylko Sidekiq; odpowiedź brzmi: nie. Jak zasugerował DickieBoy, powinieneś być w stanie go po prostu odłączyć, gdy zadanie zależne zostanie ukończone. Coś takiego.

# app/workers/hard_worker.rb 
class HardWorker 
    include Sidekiq::Worker 

    def perform() 
    puts 'Doing hard work' 
    LazyWorker.perform_async() 
    end 
end 

# app/workers/lazy_worker.rb 
class LazyWorker 
    include Sidekiq::Worker 

    def perform(name, count) 
    puts "Guess it's time I do something" 
    end 
end 

Tutaj LazyWorker działa tylko na końcu HardWorker; można dodać dodatkową logikę, jeśli nie zawsze jest to potrzebne; LazyWorker można nadal wywoływać bezpośrednio, jeśli/kiedy jest to potrzebne. To powinno działać dla większości, jeśli nie wszystkich przypadków użycia; i z Sidekiq to naprawdę jedyna opcja, chyba że wciągniesz inny klejnot.


Podczas wypalania bezpośrednio od innej pracy nie jest wystarczająco dobre ...

Jeśli robisz coś, gdzie to nie będzie działać należy rozważyć stan maszyny. Gdy zadanie zostanie uruchomione, utworzy rekord sam z siebie, prawdopodobnie wraz z ID, i może mieć uruchomione, nieudane, ukończone, oczekujące stany. Zależne zadanie może następnie łatwo sprawdzić dla jednej lub więcej zależności w tabeli stanów i upewnić się, że wszystkie jego zależności są spełnione.

Jesteś uzależniona praca może zrobić spojrzeć w górę w tabeli stanów dla uzależnienia