C'è un modo per dire sidekiq che un lavoro dipende da un altro e non può essere avviato fino a quando quest'ultimo non è finito?C'è un modo per dire sidekiq che un lavoro dipende da un altro
risposta
È possibile definire le dipendenze lavoro utilizzando Sidekiq Superworker:
# config/initializers/superworkers.rb
Superworker.create(:MySuperworker, :user_id) do
Worker1 :user_id
Worker2 :user_id
end
# Anywhere
MySuperworker.perform_async(123)
Quando si esegue MySuperworker, worker1 avrà inizio. Al termine, verrà avviato Worker2. Ciò ti consente di separare il grafico delle dipendenze dagli stessi lavoratori. (Disclaimer: Sono l'autore della gemma.)
Utilizzare solo Sidekiq; la risposta sarebbe no. Come suggerito da DickieBoy, dovresti essere in grado di dargli il calcio d'inizio al termine del lavoro dipendente. Qualcosa come questo.
# 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
Qui LazyWorker viene eseguito solo alla fine di HardWorker; logica aggiuntiva può essere aggiunta se questo non è sempre necessario; LazyWorker può ancora essere chiamato direttamente se/quando necessario. Questo dovrebbe funzionare per la maggior parte se non tutti i casi d'uso; e con Sidekiq è davvero la tua unica opzione a meno che tu non faccia un altro gioiello.
Quando si spara direttamente da un altro lavoro non è abbastanza buono ...
Se stai facendo qualcosa in cui questo non funziona si dovrebbe considerare una macchina a stati. Quando un lavoro viene licenziato, crea un record di sé stesso, probabilmente insieme a un ID e potrebbe avere stati in esecuzione, non riusciti, completati, in attesa. Il lavoro dipendente può quindi verificare facilmente una o più dipendenze nella tabella di stato e assicurarsi che tutte le dipendenze siano soddisfatte.
Sei lavoro dipendente potrebbe fare uno sguardo nella vostra tabella di stato per la dipendenza
Non si può avere il primo lavoro di avvio del lavoro dipendente? – DickieBoy
no. non può essere gestito in questo modo, purtroppo –