Laravel队列为作业多次处理

bat*_*hir 3 php laravel laravel-queue

下面是我运行php artisan队列时发生的事情:listen和我的工作表上只有一份工作

在此输入图像描述

这是我的代码:

public function handle(Xero $xero)
{
        $this->getAndCreateXeroSnapshotID();
        $this->importInvoices($xero);
        $this->importBankTransaction($xero);
        $this->importBankStatement($xero); 
        $this->importBalanceSheet($xero);
        $this->importProfitAndLoss($xero);

}
Run Code Online (Sandbox Code Playgroud)

Mag*_*gus 15

为了使一个作业离开队列,它必须到达句柄函数的末尾而没有错误或异常.

如果你的任何一个函数内部存在某些缺陷,那么该作业会假定它有一个临时问题并被放回队列中.

可以实现相同的行为

$this->release()
Run Code Online (Sandbox Code Playgroud)

如果你无法弄清楚什么是破坏你可以将你的工作设置为仅运行一次并被视为失败,那么他将被置于失败的作业队列中

php artisan queue:work --tries=1
Run Code Online (Sandbox Code Playgroud)

如果您正在使用数据库队列(很棒的调试),请运行此命令以创建失败的队列表

php artisan queue:failed
Run Code Online (Sandbox Code Playgroud)

最后找出你的代码有什么问题

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

您还可以将错误日志通道设置为松弛,错误或其他.一定要检查一下.请不要被冒犯,在处理laravel队列时这样搞砸是正常的,你觉得我怎么来到这里?


Adn*_*taz 7

Laravel 尝试一次又一次地运行该作业。

php artisan queue:work --tries=3
Run Code Online (Sandbox Code Playgroud)

上层命令只会尝试运行作业 3 次。

希望这可以帮助