2017-05-04 3 views
0

Manchmal muss ich einen Laravel-Auftrag freigeben und ihn in die Warteschlange aufnehmen. Wenn Sie dies tun, wird die Anzahl der Versuche erhöht. Es wird 2 und wenn Ihr Warteschlangen-Worker auf 1 Versuch beschränkt ist, wird es nie ausgeführt.Freigegebene Laravel-Aufträge ohne Erhöhung Anzahl der Versuche

Wie kann ich ohne steigende Versuche freigeben?

Zum Lösen Ich verwende:

$this->release(30); 

Vor dieser Zeile ich den folgenden Code versucht:

$payload = json_decode($this->payload, true); 
if (isset($payload['attempts'])) { 
    $payload['attempts'] = 0; 
} 
$this->payload = json_encode($payload); 

Dies funktioniert nicht. Die payload Eigenschaft ist nicht verfügbar. Es scheint in the Job class anwesend zu sein.

Der Code, den Laravel Framework zurücksetzen muss, ist in der RetryCommand Klasse. Es ist wie folgt:

protected function resetAttempts($payload) 
{ 
    $payload = json_decode($payload, true); 
    if (isset($payload['attempts'])) { 
     $payload['attempts'] = 0; 
    } 
    return json_encode($payload); 
} 

Aber ich kann nicht herausfinden, wie die $payload von meiner Job-Klasse zugreifen?

Gibt es eine bessere Möglichkeit, einen Job freizugeben, ohne die Anzahl der Versuche zu erhöhen?

Ich benutze Laravel 5.4 und Redis Warteschlangentreiber.

Antwort

0

Also habe ich gerade gelöscht und requeueing einen neuen Job. Vielleicht nicht sauber, aber es funktioniert.

$this->delete(); 

$job = (new ProcessPage($this->pdf))->onQueue('converting'); 
dispatch($job); 
Verwandte Themen