我使用laravel 5.1 Queue作为我的后台函数与异步。 但我想只运行该功能一次。如果该功能失败,我想做其他过程。 我怎样才能发现我的工作失败了? 我做对还是错?我应该改变什么? ps:我是初学者。我在我的控制器中使用了这个。
$job = new myjob($var1, $var2);
$this->dispatch($job);
$job->release();
if ($job->attempts() >= 1)
{
$job->delete();
//will do other process
}
答案 0 :(得分:3)
您应该将--tries
参数与1
值一起使用,例如:
php artisan queue:work --tries=1
这将只运行一次任务,如果失败则不会重复。
答案 1 :(得分:0)
如果您在访问控制台时遇到问题,可以在控制器中定义尝试:
<?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
我希望得到帮助:)