如何防止排队作业失败后执行?

时间:2017-01-18 05:20:03

标签: php laravel laravel-5.1 laravel-queue

我已将我的主管工作者配置为在发生故障时尝试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...
    }
}

任何帮助将不胜感激! :)

1 个答案:

答案 0 :(得分:1)

您可以使用attempts方法检查运行作业的尝试次数:

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