如何处理失败的工作laravel

时间:2018-03-08 13:37:38

标签: laravel

我在我的cron作业上多次调用不同的api,例如:

foreach ($transactions as $transaction) {
    $job = (new SendApplicationToBank($transaction));
    $this->dispatch($job);
}

一笔交易有很多银行,所以我向所有银行发送交易:

作业:

public function handle(){
    try {
        $result = app($bankClass)::sendLoanApplication($this->transaction);
    } catch (Exception $e) {
        //Silent fail
    }
}

问题是它在第一个银行失败并且只是继续重试。

应如何去做,如果一个工作失败,只需重新排队并继续下一个工作?

结果:

php artisan queue:listen

2 个答案:

答案 0 :(得分:1)

你不应该抓住Exception让工作失败。现在你正在抓住它,什么都不做(//Silent fail

您应该在数据库中创建一个表来自动捕获失败的作业:

php artisan queue:failed-table

在运行队列的脚本中,您应该在失败前添加尝试次数:

php artisan queue:listen --tries=3

添加某种超时也很聪明:

php artisan queue:listen --tries=3 --timeout=60

您还可以通过向作业添加失败的方法来调用失败的webhook:

public function failed()
{
    // Called when the job is failing...
}

答案 1 :(得分:0)

运行有限尝试的命令,您可以运行以下命令

php artisan queue:work --retry=3

它会尝试只运行你的工作三次

并以编程方式使用

    public $tries = 3;

在你的工作班上

希望这有帮助