Как предотвратить выполнение задания в очереди после сбоя?

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

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

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


person Ariel Magbanua    schedule 18.01.2017    source источник


Ответы (1)


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

public function handle()
{
    if ($this->attempts() > 1) {
        return;
    }
}
person Grin    schedule 18.01.2017
comment
Спасибо, я глупый, я пропустил эту часть документации laravel. - person Ariel Magbanua; 18.01.2017