2016-07-15 2 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

큐는 한 번 요청에 대한 의미가 아닌 연속 작업이 실행. 아키텍처가 cron 작업 설정으로 이동해야하므로 원하는 코드를 다시 실행하도록 간격을 설정할 수 있습니다.

는 쉽게 사용되는 CPU 파워의 많은으로 이어질 수 주로하기 때문에, 좋은 생각 같은 소리하지 않습니다, 여기에 작업 스케줄링 문서 https://laravel.com/docs/5.1/scheduling

+0

대기열은 웹 요청을 즉시 실행하게하고 무한 대기열 작업이 좋은 생각이지만 대기열이 더 많다는 말을하지 않고 배경에서 더 많은 처리 작업이 실행되도록합니다. 비동기 스크립트 집행자 imo의 –

0

영원히 실행 작업에서보세요. 하지만 나는 어떤 방식 으로든 성취 한 직무 연계를 해왔고 이것이 당신의 문제를 해결하는 데 도움이 될 수 있다고 생각합니다.

제가 보통하는 일은 모델 특정 직업, 모델 책임의 책임입니다. 이렇게하면 작업에서 쉽게 호출 할 수 있습니다.

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(); 
}