2016-07-15 1 views
0

キュージョブを常に実行しておく必要があります。キュージョブを常に実行しています

これは、ジョブが処理を終了すると、ジョブが再び開始されることを意味します。

どうすればいいですか?

は、ここに私の仕事です:

<?php 

namespace App\Jobs; 

use App\User; 
use App\Post; 

use App\Jobs\Job; 
use Illuminate\Contracts\Mail\Mailer; 
use Illuminate\Queue\SerializesModels; 
use Illuminate\Queue\InteractsWithQueue; 
use Illuminate\Contracts\Queue\ShouldQueue; 

class PostJob extends Job implements ShouldQueue 
{ 
    use InteractsWithQueue, SerializesModels; 

    protected $user; 

    public function __construct(User $user) 
    { 
     $this->user = $user; 
    } 

    public function handle() 
    { 
     $posts = Post::where('user_id', $this->user->id) 
      ->get(); 

     foreach ($posts as $post) { 
      // perform actions 
     } 
    } 
} 

ここでジョブ・コントローラです:

<?php 

namespace App\Http\Controllers; 

use App\User; 

use Illuminate\Http\Request; 
use App\Jobs\SendReminderEmail; 
use App\Http\Controllers\Controller; 

class UserController extends Controller 
{ 
    public function startPostJob(Request $request, $id) 
    { 
     $users = User::all(); 

     foreach ($users as $user) { 
      $this->dispatch(new PostJob($user)); 
     } 
    } 
} 
+0

ジョブの実行後に例外をスローすると、ジョブがキューに戻されます。ただし、アプリケーションで許可されている最大試行回数だけ再試行されます。 – swatkins

+0

@ user6592471 –

答えて

0

キューは1時間要求ではなく、継続的なジョブ実行のためのものです。あなたのアーキテクチャは、cronジョブの設定に移行する必要がありますので、希望のコードを再実行する間隔を設定することができます。

+0

答えには助けが見つかりましたか?キューはWeb要求を即座に実行させ、無限のキュージョブが良いアイデアだと言っているのではなく、非同期スクリプト実行者のimoの –

0

https://laravel.com/docs/5.1/schedulingここに永遠に実行中のジョブのタスクスケジューリングのドキュメントを見てください、それは簡単に使用されているCPUパワーの多くにつながる可能性が主な理由は、最高のアイデアのような音はありません。しかし、私は特定の方法で達成した雇用連鎖を行っており、これはあなたの問題を解決するのに役立つと思います。

私が通常やっていることは、モデルに固有の仕事、モデル責任の責任を負うことです。これにより、ジョブからの呼び出しが容易になります。

public class User{ 
    use DispatchesJobs; //must use, for dispatching jobs 

    ... 

    public function startJob() 
    { 
     $this->dispatch(new PostJob($this)); 
    } 
} 

これにより、ジョブが終了した後でジョブを連鎖させることができます。終了後、ジョブを削除することを忘れないでください。そして毎回新しい仕事を創造することによって、永遠に続くでしょう。

public function handle() 
{ 

    ... 

    foreach ($posts as $post) { 
     // perform actions 
    } 

    $this->user->startJob(); 

    $this->delete(); 
} 
関連する問題