2015-09-09 5 views
8

Mit Blick auf den Job unten würde ich annehmen, dass der Job auf einer low_priority Warteschlange läuft.Hat ActiveJob Warteschlangen mit bestimmter Priorität?

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

Ich würde damit einverstanden sein, aber das ist nur der Name der Warteschlange korrekt? Es hat eigentlich nichts mit Priorität zu tun. Wenn ich zum Beispiel einen Job mit einer Warteschlange namens :my_queue erstellt habe, würde er so behandelt werden, als hätte er die gleiche Priorität wie eine :low_priority Warteschlange.

Aus der Dokumentation konnte ich nichts finden, das angibt, dass ich Aufträge in der Warteschlange priorisieren kann. Ich weiß, dass delayed_jobs diese Funktionalität hat, aber ich habe es in active_job nicht gefunden.

Antwort

4

Die Priorität hängt vom tatsächlichen QueueAdapter und davon ab, wie dieser Adapter konfiguriert wurde. Wenn Ihr Adapter keine Prioritäten unterstützt oder nicht richtig konfiguriert wurde, kann ActiveJob Ihnen auch nicht helfen.

Erfahren Sie mehr Details über Adapter von hier:

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

Der Hauptservice ist dies:

Der wichtigste Punkt, um sicherzustellen, dass alle Rails-Anwendungen einen Job Infrastruktur haben in Ort. Wir können dann Framework-Features und andere Edelsteine ​​erstellen, ohne sich um API-Unterschiede zwischen verschiedenen Job-Läufern wie Delayed Job und Resque kümmern zu müssen. Die Auswahl des Warteschlangen-Backends wird dann eher zu einem betrieblichen Problem. Und Sie können zwischen ihnen wechseln, ohne Ihre Jobs neu schreiben zu müssen.

Die Konfiguration der Warteschlange (einschließlich der Prioritäten) wird vom Adapter übernommen.

Als Beispiel für Warteschlange Konfiguration siehe Sidekiq wiki:

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

+1

Ja, das macht Sinn, aber delayed_job und sidekiq beide Unterstützung Warteschlangen und Priorität und Sie können diese Ebene an einem Arbeitsplatz eingestellt. Unterstützt der aktive Job dies, wenn Sie den delayed_job- oder sidekiq-Adapter verwenden? Es hört sich so an, als würden Sie ja sagen ... aber keine der Unterlagen hilft wirklich. Ich habe mir bereits die Referenzen angesehen, die Sie hinzugefügt haben, bevor Sie diese Frage gepostet haben, aber ich konnte nichts finden ... vielleicht verpasse ich etwas? –

+0

Sie müssen dazu Ihre Adapterdokumentation lesen. ActiveJob ist eine Abstraktion. – dimakura

+1

Ich verstehe das. Ich habe die Dokumentation gelesen - Ich benutze delayed_jobs und Sie können die Priorität eines Jobs auf einem verzögerten Job zum Beispiel 'handle_asynchronously: send_mailer,: priority => 20'. Mit Sidekiq kann ich sehen, es ist möglich, da Sie Warteschlangen und Priorität in Eine Konfigurationsdatei. Verzögerter Job scheint dies nicht zu haben. Meine Frage ist, wie verwende ich die Abstraktion, die ActiveJob ist, um Priorität zu setzen ... ist dies über ActiveJob möglich oder muss ich delayed_job verwenden? Wenn man den Adapter delayed_job in ActiveJob betrachtet, scheint dies nicht möglich zu sein. Ich bin mir nicht sicher, was ich noch sagen soll, um klarer zu sein. –