2017-01-17 3 views
0

私は単純なキューを書いています。ジョブをフェイルして、Laravelのキューで次の試行をスキップする方法はありますか?

namespace App\Jobs; 

use App\SomeMessageSender; 

class MessageJob extends Job 
{ 
    protected $to; 
    protected $text; 

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

    /** 
    * Execute the job. 
    * 
    * @return void 
    */ 
    public function handle(SomeMessageSender $sender) 
    { 
    if ($sender->paramsAreValid($this->to, $this->text) { 
      $sender->sendMessage($this->to, $this->text); 
     } 
    else { 
     // Fail without being attempted any further 
      throw new Exception ('The message params are not valid'); 
     } 
    } 
} 

のparamsは、上記のコードは失敗するジョブを引き起こすが、それはまだ左の試みを持っている場合、それは再試行されます例外がスローされます有効でない場合。代わりに、私はこれをに即座に失敗させ、再び試みないようにしたい

どうすればいいですか?

+0

'paramsAreValid'で正確に何をチェックしますか?多分あなたはそれを早くにすることができ、最初の仕事を押し進めることさえできないからです。 – Loek

+0

ソースコードは単なる例です。以前に検証チェックを実行できないとします。 –

答えて

3

InteractsWithQueueの特性を使用し、ジョブを削除する場合はdelete()、失敗する場合はfail($exception = null)を呼び出します。ジョブの失敗は、削除され、failed_jobsテーブルに記録され、JobFailedイベントがトリガーされることを意味します。

関連する問題