Czy istnieje sposób, aby powiedzieć sidekiq, że jedno zlecenie jest zależne od innego i nie można go uruchomić, dopóki nie zostanie zakończone?Czy jest jakiś sposób, aby powiedzieć sidekiq, że jedno zlecenie jest zależne od innego
Odpowiedz
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).
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
Czy nie możesz rozpocząć swojej pierwszej pracy zależnej? – DickieBoy
nie. niestety nie można tego traktować w ten sposób –