2017-01-18 6 views
0

Я сконфигурировал своего работника-диспетчера, чтобы он попытался выполнить задание в 10 раз в лаваре в случае сбоя. Ниже приведен образец моей рабочей конфигурации.Как предотвратить работу в очереди после выполнения после сбоя?

[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 

Но у меня есть конкретные очереди Laravel работы, которую я хочу быть выполнен только один раз, независимо, если есть сбой или нет. Я хочу предотвратить будущие попытки выполнения задания, если есть сбой, не меняя конфигурацию моего рабочего.

Ниже приведена структура моего класса работы.

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... 
    } 
} 

Любая помощь будет принята с благодарностью! :)

ответ

1

Вы можете проверить количество попыток, которые были сделаны, чтобы выполнить задание, используя метод attempts:

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

Спасибо Я глупо я проглядел, что часть Laravel документаций. –