2015-01-11 4 views
5

대기열 (Beanstalkd)에 추가 된 작업이 Laravel (Laravel 5)에서 완료되었는지 확인해야하며 완료되면 업데이트 된 레코드를 반환해야합니다 데이터베이스에 레코드 업데이트 대기열에 추가 된 작업). 내 composer.json에 추가 한 : Beanstalkd 대기열의 작업이 Laravel에서 완료되었는지 확인하는 방법

"pda/pheanstalk": "3.*" 

내가 이런 식으로 대기열에 작업을 추가 :

public function find($queueName, $jobId, $recordId) 
{ 
    $phean = Queue::getPheanstalk(); 

    try { 
     $phean->peek($jobId); 
     $data = ['status' => 'waiting']; 
    } catch (ServerException $e) { 
     $message = $e->getMessage(); 

     if ($message == 'NOT_FOUND: Job ' . $jobId . ' does not exist.') { 
      $data = ... // here I get from database data for $recordId 

     } else { 
      $data = ['status' => 'error']; 
     } 
    } 

    return $data; 
} 
:

$jobId = Queue::push('App\Class', $object->toArray(), $this->getQueueName()); 

내가 작업을 사용하여 완료 여부를 확인하는 데 사용을 다음과 같은 기능입니다

질문은 - 작업이 완료되었는지 확인하는 신뢰할 수있는 방법입니까? 여기에서 나는 예외로부터 얻는 메시지를 비교한다. 작업 완료 여부를 확인하는 다른 방법을 찾지 못했습니다.

답변

1

아직 Laravel 5를 사용하지 않았지만 Laaravel 4에서는 실패한 작업 테이블이 있습니다. 완료되지 않은 작업을 볼 수 있습니다. 나는 L5가 무언가를 가지고 있거나 같은 과정을 유지할 것으로 가정하고있다. 그것은 당신의 문제를 해결하지 못하겠습니까?

내 견해로 볼 때, 당신은 단지 관점을 뒤집어 쓴 것처럼 보입니다. 실패한 것을 찾는 대신, 성공한 것을 찾고 있습니다.

출처 : http://laravel.com/docs/4.2/queues#failed-jobs

0

은 아직 Laravel 5를 사용하지 마십시오. 그러나 Laravel 4에서는 작업이 완료되면 대기열에서 수동으로 삭제해야합니다.

Deleting A Processed Job: Once you have processed a job, it must be deleted from the queue, which can be done via the delete method on the Job instance

그것은 단순히 이러한 방법을 사용하지 않은 경우, 작업 상태가 미완성 남아 있음을 의미 다음은 공식 문서입니다. 귀하의 경우 큐를 가져 와서 작업 ID가 있는지 확인할 수 있습니다.

+0

맞지만 실패하면 실패한 작업으로 이동합니다. 따라서 작업이 실패한 작업을 살펴 ​​보았더라도 작업이 완료되었는지 확인하려면 작업이 대기열에 있고 실패한 작업이 아닌 대기열에 남아있을 수 있기 때문에 작업이 아직 대기열에 있는지 확인해야합니다. –

+0

이봐, pbeanstalk가 실행중인 작업의 전체 목록을 가져 오는 방법을 제공하지 않는 것 같습니다. 작업 관련 정보를 데이터베이스에 저장하고 삭제되거나 실패한 경우 상태를 표시 할 수 있습니다. – Ray

0

작업 완료를 기준으로 명령을 실행해야하는 경우 - 작업이 완료되면 대기중인 명령을 실행해야합니다. 그러면 시스템에서 나머지 작업을 처리 할 수 ​​있습니다.

그렇지 않으면 작업이 완료되었는지 여부를보기 위해 '폴링'이 번거롭고 비효율적으로 보입니다.

Laravel 5 - 테일러가 제공 한 새로운 명령 도구를 이벤트로 사용하고 ShouldBeQueued 구현이 적용되어 명령이 다른 작업이 완료 될 때까지 대기하도록 할 수 있습니다.

관련 문제