2013-12-19 2 views
1

전에 대기열 시스템을 설정 한 적이 없습니다. 나는 그것을 한 번 주기로 결정했다. 대기열 시스템이 완벽하게 작동하는 것 같습니다. 그러나 데이터가 올바르게 전송되지 않는 것 같습니다. 여기 내 코드가있다.Laravel 4.1 및 Beanstalkd를 사용하여 대기열 클래스에 데이터 전달

... 
$comment = new Comment(Input::all()); 
$comment->user_id = $user->id; 
$comment->save(); 

if ($comment->isSaved()) 
{ 
    $voters = $comment->argument->voters->unique()->toArray(); 
    Queue::push('Queues\NewComment', 
     [ 
     'comment' => $comment->load('argument', 'user')->toArray(), 
     'voters' => $voters 
     ] 
    ); 
    return Response::json(['success' => true, 'comment' => $comment->load('user')->toArray()]); 
} 
... 

이 다음과 같습니다 처리하는 클래스 :

class NewComment { 

    public function fire($job, $data) 
    { 
     $comment = $data['comment']; 
     $voters = $data['voters']; 

     Log::info($data); 

     foreach ($voters as $voter) 
     { 
      if ($voter['id'] != $comment['user_id']) 
      { 
       $mailer = new NewCommentMailer($voter, $comment); 
       $mailer->send(); 
      } 
     } 

     $job->delete(); 
    } 

} 

이 동기 큐 드라이버를 사용하여 내 로컬 서버에 아름답게 작동합니다. 그러나 제작 서버에서 Beanstalkd를 사용하고 있습니다. 대기열이 예상대로 실행됩니다. 그러나, 나는이 같은 오류 받고 있어요 :

[2013-12-19 10:28:05] production.INFO: {"comment":{"incrementing":true,"timestamps":true,"exists":true}} [] [] 

이 왜 내가 단서가 없다 : 나는 NewComment 큐 핸들러에 전달 된 $data 변수를 인쇄 할 경우

[2013-12-19 10:25:02] production.ERROR: exception 'ErrorException' with message 'Undefined index: voters' in /var/www/mywebsite/app/queues/NewComment.php:10 

을,이 얻을 사고. 누구나이 문제를 해결하는 방법을 알고 있습니다.

답변

0

나는 결국 간단한 숫자를 고집했다. 큐의 주석 ID를 저장 한 다음 큐 처리기 클래스에서 모든 처리를 수행했습니다. 그것이 가장 쉬운 방법이었습니다.

0

그래서 $ 유권자는 페이로드의 일부로 대기열에 들어간 것이 아닙니다. Queue :: push() 함수 밖에서 페이로드 배열을 작성하고 내용을 기록한 다음 정확히 무엇이 들어 있는지 확인하십시오.

예상치 못한 것을 얻지 못하면 찾았습니다. , 기회가 있습니다, 그것은 당신이 기대하는 것처럼 두지 않습니다.

당신이있는 동안, beanstalkd 시스템에 오래된 데이터가 쌓여 있지 않은지 확인하십시오. 페이로드에 타임 스탬프를 추가하여 최신 데이터인지 확인하고 적절한 정보가없는 작업을 삭제하거나 묻어서 처리하기 전에 확인할 수 있습니다. beanstalkd tube에있는 항목의 수를보고 있으면 작업이 멈추었을 때이를 분명하게해야합니다.

저는 Laravel에 대해 아무 것도하지 않았습니다 만 다른 Beanstalkd 및 SQS 지원 시스템에 대한 많은 작업을 작성했습니다. 어려운 부분은 작업이 실패하고 잘못된 것이 무엇인지, 동일한 오류를 계속해서 다시 반복하지 마십시오.

0

당신은 배열의 데이터를 포장하여 핸들러에서 예상대로 데이터를 얻을 :

array(
    array('comment' => $comment->load('argument', 'user')->toArray(), 
     'voters' => $voters 
     ) 
) 
관련 문제