2016-09-01 3 views
1

I Laravel Warteschlangen mit einem Datenbanktreiber und Supervisor mit einer Warteschlange Arbeiter zu halten, laufen die ganze Zeit:Ausführen mehrerer Arbeiter Laravel Warteschlange mit Supervisor

[program:laravel_queue] 
command=php artisan queue:listen --timeout=1800 --tries=5 
directory=/var/app/current 
stdout_logfile=/var/app/support/logs/laravel-queue.log 
logfile_maxbytes=0 
logfile_backups=0 
redirect_stderr=true 
autostart=true 
autorestart=true 
startretries=86400 
EOB 

Einige der Warteschlange Aufgaben können etwa 10 Minuten in Anspruch nehmen.

Ich habe 2 Teile auf die Frage:

1) Wie ich das Skript bearbeiten können mehrere (zum Beispiel 3) Warteschlange Arbeiter auf der gleichen Warteschlange zu laufen.

2) Gibt es eine Möglichkeit, die Anzahl der ausgeführten Warteschlangen-Worker basierend auf der Anzahl der Jobs zu skalieren, die auf die Verarbeitung warten?

Der Grund für Frage 2 ist, dass wir Chargen von hektischen Zeiten und dann viele ruhige Zeiten haben, also möchte ich nicht wirklich Ressourcen mit 3 Hörern verschwenden, die die ganze Zeit laufen.

Antwort

2

In Supervisor Sie die Menge der Prozesse mit dem Parameter angeben numprocs, so dass Sie eine Zeile in Ihrem Skript hinzufügen können, das sagt:

numprocs=5

Jetzt Sie können einige clevere Dinge tun, zum Beispiel, wenn nur einige der Prozesse, die in den Warteschlangen ausgeführt werden, zu lange dauern, können Sie eine andere Gruppe von Warteschlangenprozessen erstellen, um diese und andere für die Light-Prozesse zu arbeiten. Um dies zu erreichen, können Sie eine Supervisor-Konfiguration mit einem Queue-Namen wie --queue=longprocess und einem anderen mit --queue=lightprocess anlegen und in Ihrem Programm den Job in die entsprechende Queue schicken, so lange Prozesse kurze Prozesse nicht verzögern.

Sie können auch queue priorities innerhalb einer Supervisor-Konfigurationsdatei angeben, z. B. --queue=lightprocess,longprocess. Auf diese Weise suchen Ihre Mitarbeiter zuerst nach lightprocess, bevor sie longprocess ausführen.

Um Ihre zweite Frage zu beantworten, nein, in Bezug auf Supervisor alle Prozesse laufen, es weiß nicht, ob die Warteschlange beschäftigt oder im Leerlauf ist, daher kann es Prozesse nicht töten und erstellen sie basierend auf ihrer Verwendung, so Nein, Sie können keine dynamische Konfiguration erstellen, um nur dann mehr Prozesse zu erstellen, wenn Sie gerade beschäftigt sind.

Ein Hinweis, wenn Sie mehr als 1 Nummernprozeduren zuweisen, müssen Sie dem Namen die Nummer des Prozesses hinzufügen. Entsprechend der Konfigurationsdokumentation des Supervisors:

Der Supervisor startet so viele Instanzen dieses Programms wie von numprocs benannt. Beachten Sie, dass, wenn numprocs> 1 ist, der process_name-Ausdruck% (process_num) s (oder einen anderen gültigen Python-Zeichenfolgenausdruck, der process_num enthält) darin enthalten muss.

Supervisor-Konfiguration docs: http://supervisord.org/configuration.html

0

Von Laravel docs können Sie numprocs=3 verwenden, um 3 Prozesse zu generieren.

und gibt auch eine Warteschlange: command=php artisan queue:listen --queue=myqueue --tries=5

Verwandte Themen