2016-09-29 1 views
2

Pls 저는 아직 laravel에 익숙하지 않습니다. 몇 차례 laravel에서 이벤트를 사용해 왔지만 궁금해서 laravel에서 이벤트를 비동기 적으로 실행할 수 있는지 알고 싶습니다. 아래 코드의 예를 들어 같은 이벤트가 해고 된 후laravel에서 이벤트를 비동기 적으로 실행하는 방법

<?php 

    namespace mazee\Http\Controllers; 

    class maincontroller extends Controller 
    { 
    public function index(){ 
     Event::fire(new newaccountcreated($user)) ; 
     //do something 

    } 

는 "newaccountcreated"이벤트의 이벤트 리스너에서 코드의 블록 가능 비동기 적으로 실행?

+0

아니요. php 프로세스에는 항상 하나의 스레드가 있기 때문에. 그렇습니다, 가능한, 그러나 Laravel를 위해 아닙니다, 나는 추정한다. – Deep

답변

5

물론 가능합니다. Laravel Queues에 관해 읽어야합니다. 모든 드라이버 (동기화 드라이버 만)는 비동기입니다. 가장 쉬운 구성은 database 드라이버이지만 RabbitMQ 서버를 사용해 볼 수도 있습니다. 여기에 Laravel bundle입니다.

newaccountcreated 특성 Illuminate\Queue\InteractsWithQueue (당신은 그에 대해 읽을 수 있습니다 here)을 EventListener에 추가하면 Laravel Queue와 연결하는 데 도움이됩니다.

1

필립스의 답변은이 모든 것을 다룹니다. 나는 그것에 조금 더 추가 할 것이다. 이벤트를 푸시하면 기본 대기열로 이동합니다. 큐 이름도 지정할 수 있습니다. 리스너 클래스가 ShouldQueue를 구현하고 아래처럼 대기열 메소드를 리스너 클래스에 포함 시키십시오.

/** 
* Push a new job onto the queue. 
**/ 
public function queue($queue, $job, $data) 
{ 
    return $queue->pushOn('queue-name', $job, $data); 
} 
관련 문제