2017-01-18 4 views
0

Ich habe meinen Supervisor-Mitarbeiter so konfiguriert, dass er im Falle eines Fehlers 3 mal einen Job in Laravel-Warteschlange versucht. Unten ist das Beispiel meiner Worker-Konfiguration.Verhindern, dass der Job in der Warteschlange nach einem Fehler ausgeführt wird?

[program:laravel-worker] 
process_name=%(program_name)s_%(process_num)02d 
command=php home/vagrant/Code/lead_reactor/artisan queue:work database --sleep=3 --tries=3 --daemon 
autostart=true 
autorestart=true 
user=vagrant 
numprocs=8 
redirect_stderr=true 
stdout_logfile=home/vagrant/Code/lead_reactor/storage/logs/laravel-worker.log 

Aber ich eine bestimmte Laravel Auftragswarteschlange, die ich will, unabhängig nur einmal ausgeführt werden, wenn es zu einem Ausfall oder gar keine ist. Ich möchte die zukünftigen Versuche der Jobausführung verhindern, wenn es einen Fehler gibt, ohne meine Worker-Konfiguration zu ändern.

Unten ist die Struktur meiner Jobklasse.

class SendBugReports extends Job implements SelfHandling, ShouldQueue 
{ 
    use InteractsWithQueue, SerializesModels; 

    protected $bugReports; 

    /** 
    * Create a new job instance. 
    * 
    */ 
    public function __construct() 
    { 
     $this->bugReports = BugReport::all(); 
    } 

    /** 
    * Execute the job. 
    * 
    * @return void 
    */ 
    public function handle() 
    { 
     //job processes... 
    } 
} 

Jede Hilfe wird sehr geschätzt! :)

Antwort

1

Sie können die Anzahl der Versuche prüfen, ob der Auftrag ausgeführt werden unter Verwendung des attempts Verfahren hergestellt wurden:

public function handle() 
{ 
    if ($this->attempts() > 1) { 
     return; 
    } 
} 
+0

Dank Ich bin dumm ich übersehen, dass ein Teil der Laravel Dokumentationen. –

Verwandte Themen