具有单独最大尝试次数的排队作业,如何?

时间:2016-12-02 01:18:13

标签: php laravel laravel-5

通常,在队列级别上指定最大尝试次数如下:

php artisan queue:listen connection-name --tries=3

我希望能够在作业类的作业级别上覆盖它(不影响其他作业)。

我可以想到三种方法,但它们可能并不优雅:

  1. 在队列级别设置大量尝试
  2. 查看失败的队列并重试作业
  3. 失败时创建新作业
  4. 注意:

    1. 我的案例与通过API进行投票有关。
    2. 我正在自己的模特中记录我的民意调查。

2 个答案:

答案 0 :(得分:2)

尝试使用attempts()方法检查作业类中的当前作业尝试。像下面的东西。

class MyJobClass implements ShouldQueue
{

    public function handle()
    {
        if ($this->attempts() < 3) {
            // do job things
        }
        else {
            // delete job
        }
    }
}

参考laravel资料库https://github.com/laravel/framework/blob/5.3/src/Illuminate/Queue/InteractsWithQueue.php#L21

答案 1 :(得分:0)

从Laravel 5.4开始,您可以在作业类上指定$tries以覆盖该作业的尝试次数

    /**
     * The number of times the job may be attempted.
     *
     * @var int
     */
    public $tries = 5;

https://laravel.com/docs/5.7/queues#max-job-attempts-and-timeout