2016-09-29 4 views
2

Pls Ich bin noch neu bei Laravel und habe einige Male Ereignisse in Laravel benutzt, aber ich bin neugierig und würde gerne wissen, ob es möglich ist, ein Ereignis in Laravel asynchron auszuführen. Wie zum Beispiel in dem folgenden Code:wie man Ereignisse in Laravel asynchron ausführt

<?php 

    namespace mazee\Http\Controllers; 

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

    } 

Ist es möglich, dass der Code-Block in dem Ereignis-Listener der „newaccountcreated“ -Ereignis werden asynchron ausgeführt, nachdem das Ereignis ausgelöst wird?

+0

Nein. Weil PHP-Prozess immer einen Thread hat. Ja, es ist möglich, aber nicht für Laravel, nehme ich an. – Deep

Antwort

5

Ja, natürlich ist das möglich. Sie sollten über Laravel Queues lesen. Jeder Treiber (nur nicht Sync Treiber) sind asynchron. Am einfachsten zu konfigurieren ist der database Treiber, aber Sie können auch versuchen RabbitMQ Server, hier ist Laravel bundle dafür.

Sie können auch auf Ihre Eventlistener hinzu: newaccountcreated Merkmal Illuminate\Queue\InteractsWithQueue (man kann über ihn here lesen), die werden Sie es mit Laravel Queue verbinden hilft.

1

Filips Antwort deckt alles ab. Ich werde ein bisschen mehr hinzufügen. Wenn Sie ein Ereignis drücken, wird die Standardwarteschlange aufgerufen. Sie können auch einen Warteschlangennamen angeben. Lassen Sie die Listener-Klasse ShouldQueue implementieren und schließen Sie die Warteschlangenmethode wie unten beschrieben in die Listener-Klasse ein.

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