2017-07-18 16 views
2

我正在使用laravel v5.3.30,並且我有複雜的工作,正在執行請求並將數據導入系統。如果我多次嘗試多次嘗試,那麼我的數據庫就會增加兩倍甚至三倍的插入次數。這是工作的樣子概述:Laravel工作標記爲失敗,例外說太多的嘗試,但工作成功?

<?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行。

所以我不明白工作如何失敗,即使我正在處理例外。有人有什麼主意嗎?

回答

0

推送作業排隊沒有工人和處理這個工作manualy