2015-09-09 14 views
8

Osservando il lavoro di seguito, suppongo che il lavoro venga eseguito su una coda low_priority.ActiveJob dispone di code con priorità specifica?

class GuestsCleanupJob < ActiveJob::Base 
    queue_as :low_priority 
    #.... 
end 

Concordo con questo, ma questo è solo il nome della coda corretta? In realtà non ha nulla a che fare con la priorità. Ad esempio, se ho creato un lavoro con una coda denominata :my_queue, si tratterebbe di avere la stessa priorità di una coda :low_priority.

Dalla documentazione non sono stato in grado di trovare nulla che indica che posso dare la priorità ai lavori che sono in coda. So che delayed_jobs ha questa funzionalità, ma non l'ho trovata in active_job.

risposta

4

La priorità dipende dall'effettivo QueueAdapter e dalla modalità di configurazione dell'adattatore. Se l'adattatore non supporta le priorità o non è stato configurato correttamente, ActiveJob non può aiutarti.

Scopri ulteriori dettagli su adattatori da qui:

http://edgeapi.rubyonrails.org/classes/ActiveJob/QueueAdapters.html

Il takeaway principale è questo:

Il punto principale è quello di garantire che tutte le applicazioni Rails avranno un'infrastruttura lavoro in posto. Possiamo quindi avere a disposizione funzionalità di framework e altre gemme, senza doverci preoccupare delle differenze API tra i vari job runner come Job differito e Resque. La scelta del backend di accodamento diventa più una preoccupazione operativa, quindi. E sarai in grado di passare da uno all'altro senza dover riscrivere i tuoi lavori.

La configurazione della coda (comprese le priorità) diventa responsabilità dell'adapter.

Come esempio di configurazione di coda di vedere Sidekiq wiki:

https://github.com/mperham/sidekiq/wiki/Advanced-Options#queues

+1

Sì, questo ha un senso, ma delayed_job e sidekiq entrambe le code di supporto e la priorità e si può impostare questo ad un livello di lavoro. Il lavoro attivo supporta questo se si utilizza l'adattatore delayed_job o sidekiq? Sembra che tu stia dicendo sì ... ma nessuno della documentazione in realtà aiuta. Ho già visto i riferimenti che hai aggiunto prima di pubblicare questa domanda, ma non ho trovato nulla ... forse mi manca qualcosa? –

+0

Per questo è necessario leggere la documentazione dell'adattatore. ActiveJob è un'astrazione. – dimakura

+1

Lo capisco. Ho letto la documentazione - sto usando delayed_jobs e puoi impostare la priorità di un lavoro su un delayed_job ad esempio 'handle_asynchronously: send_mailer,: priority => 20'.con sidekiq posso vedere che è possibile dato che hai impostato le code e la priorità in un file di configurazione. Il lavoro inoltrato non sembra avere questo. La mia domanda è come usare l'astrazione che è ActiveJob per impostare la priorità ... è possibile tramite ActiveJob o devo usare delayed_job? Guardando l'adattatore delayed_job in ActiveJob questo non sembra possibile. Non sono sicuro di cos'altro dire per essere più chiari. –