我怎样才能 运行 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
希望对你有所帮助:)
我使用 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
希望对你有所帮助:)