Ich erstelle eine Website mit Laravel 5. Ich benutze Warteschlangen mit Bohnenstange mit 2 Röhren. Ich habe 10 Arbeiter von daemontools überwacht. 5 Arbeiter verarbeiten Rohr A und B. Die anderen 5 Arbeiter verarbeiten nur Rohr B.
Die meiste Zeit arbeiten die Dinge gut, aber manchmal scheint die Röhre B zu blockieren. Die Protokolle zeigen, dass die Arbeiter eine Ausnahme auslösen.
%Vor%Ich frage mich, ob das Problem von mehreren Arbeitern verursacht werden könnte, die denselben Job anstreben. Ist das möglich oder gibt es eine Art Mutex, um das zu kontrollieren?
Was könnte das sonst noch verursachen?
Der Befehl in der Warteschlange hat zu lange gedauert und das Problem wurde durch den TTR-Wert in der Röhre in beanstalkd verursacht, aber es ist nicht notwendig, diesen Wert zu ändern.
Kurz gesagt, Beanstalkd behält den Job nur für einen maximalen Zeitraum (bis zur TTR) reserviert und geht dann davon aus, dass etwas schiefgelaufen ist, und bringt den Job zurück in den Bereitschaftszustand.
Stattdessen ist es möglich, den Job periodisch zu berühren , um den Reservierungstimer zurückzusetzen.
In Laravel habe ich das zu meiner App \ Commands \ Command-Klasse hinzugefügt, und ich rufe es regelmäßig bei langen laufenden Jobs innerhalb von Schleifen auf.
%Vor%Um genauer zu sein, können Sie die oben angegebene Arbeitsfunktion verwenden und in Ihrem Job Folgendes tun:
1) Deklarieren Sie eine Eigenschaft und legen Sie ihren Wert im Konstruktor fest:
%Vor%2) Dann messen Sie den Zeitunterschied innerhalb Ihrer Schleife. In meinem Fall habe ich Tausende von Bildern heruntergeladen und zugeschnitten. In diese Schleife habe ich Folgendes eingefügt:
%Vor%Tags und Links laravel-5 task-queue