Laravel的工作被标记为失败,例外说太多尝试但工作成功了吗?

时间:2017-07-18 09:06:02

标签: php laravel jobs

我正在使用laravel v5.3.30并且我有复杂的工作,它正在执行guzzle请求并将数据导入系统。如果我有多个尝试的多个工作程序,我得到双倍,甚至三次插入我的数据库。这就是工作看起来像概述:

<?php

namespace Uppdragshuset\AO\Tenant\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Uppdragshuset\AO\Tenant\Import\ImportHandler;

class ImportPatentCreateCaseJob implements ShouldQueue
{

    use InteractsWithQueue, Queueable, SerializesModels;

    protected $number;
    protected $import;
    protected $workflow_id;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($number, $import, $workflow_id)
    {
        $this->number = $number;
        $this->import = $import;
        $this->workflow_id = $workflow_id;

        $this->onQueue('import');
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $importHandler = new ImportHandler();

        try {
            DB::beginTransaction();
            $patent = $importHandler->checkIfPatentExists($this->number['number']);

            if( ! $patent){
                $patent = $importHandler->handlePatentData($this->number);
            }

            if( ! $importHandler->checkIfCaseExists($patent->id, $this->workflow_id)){
                $task_id = $importHandler->prepareWorkflowAndGetTaskId($this->workflow_id);
                $importHandler->createCase($this->workflow_id, $task_id, $patent->id);
            }

            $this->import->update([
                'status' => 'COMPLETED'
            ]);
            DB::commit();
        } catch (\Exception $e) {
            Log::error($e->getMessage());
            Log::error($e->getTraceAsString());
            DB::rollBack();
            $this->import->update([
                'status' => 'FAILED'
            ]);
        }

        $importHandler->markBatchAsCompleted($this->import);
    }
}

我正在检查数据是否已经存在,如果存在,则不应再次导入。我甚至将整个代码包装在try catch语句中,所以即使出现故障,它也会记录它并且作业运行正常。

当我尝试使用tries=1时,创建了55个作业,其中7个作业失败,但我的失败作业表显示了30行。

即使我正在处理异常,我也不会理解作业是如何失败的。有没有人有任何想法?

1 个答案:

答案 0 :(得分:0)

将工作推送到没有工人的队列并手动处理此工作