我怎样才能 运行 Laravel 只排队一次?

How can i run Laravel Queue only once?

我使用 laravel 5.1 队列作为我的异步后台函数。 但我只想 运行 该函数运行 1 次。如果该功能失败,我想做其他过程​​。 我如何检测我的工作是否失败? 我做对还是错?我应该改变什么? ps: 我是初学者。我在我的控制器中这样使用。

$job = new myjob($var1, $var2);
$this->dispatch($job);
$job->release();
if ($job->attempts() >= 1)
{
    $job->delete();
    //will do other process
}

您应该使用具有 1 值的 --tries 参数,例如:

php artisan queue:work --tries=1

这将运行每个任务只执行一次,并且在失败的情况下不会重复。

如果您无法访问控制台,您可以在控制器中定义尝试:

<?php

namespace App\Jobs;

class ProcessPodcast implements ShouldQueue
{
    /**
     * The number of times the job may be attempted.
     *
     * @var int
     */
    public $tries = 5;
}

参考:https://laravel.com/docs/5.4/queues#max-job-attempts-and-timeout

并且根据您想要实现的目标,我建议您使用队列事件监听器。

https://laravel.com/docs/5.4/events#queued-event-listeners

希望对你有所帮助:)