为了让作业离开队列,它必须到达句柄函数的末尾——没有错误和异常。
你的一个或多个函数中一定有什么东西出故障了。
如果在处理作业时抛出异常,该作业将自动释放回队列,以便再次尝试。https://laravel.com/docs/5.8/queues
可以通过以下方式实现相同的行为
$this->release()
如果您无法弄清楚发生了什么问题,您可以将您的作业设置为只运行一次。如果抛出错误,该作业将被视为失败,并将被放入失败的作业队列中。
最大尝试次数由Artisan 命令--tries
上使用的开关定义。https://laravel.com/docs/5.8/queuesqueue:work
php artisan queue:work --tries=1
如果您使用的是数据库队列,(非常适合调试)运行此命令来创建失败的队列表
php artisan queue:failed
最后,找出你的代码有什么问题。您可以捕获并记录错误。
public function handle(Xero $xero)
{
try{
$this->getAndCreateXeroSnapshotID();
$this->importInvoices($xero);
$this->importBankTransaction($xero);
$this->importBankStatement($xero);
$this->importBalanceSheet($xero);
$this->importProfitAndLoss($xero);
}catch(\Exception $e){
Log::error($e->getMessage());
}
}
您还可以将错误日志通道设置为 slack、bugsnag 或其他。请务必检查一下。请不要生气,在处理 laravel 队列时搞砸是正常的。你觉得我是怎么来的?