请问我还是laravel的新手,我已经在laravel中使用了几次事件,但我很好奇并且想知道是否可以异步执行laravel中的事件。例如,在下面的代码中:
<?php
namespace mazee\Http\Controllers;
class maincontroller extends Controller
{
public function index(){
Event::fire(new newaccountcreated($user)) ;
//do something
}
事件被触发后,“newaccountcreated”事件的事件监听器中的代码块是否可能异步执行?
答案 0 :(得分:6)
是的,当然这是可能的。你应该阅读Laravel Queues。每个驱动程序(仅 sync 驱动程序)都是异步的。最容易配置的是database
驱动程序,但您也可以尝试RabbitMQ服务器,此处为Laravel bundle。
您还可以添加到EventListener:newaccountcreated
特质Illuminate\Queue\InteractsWithQueue
(您可以阅读他here),这将有助于您将其与Laravel Queue连接。
答案 1 :(得分:1)
菲利普的答案涵盖了这一切。我会补充一点。如果你推送一个事件,它将转到默认队列。您也可以指定队列名称。让侦听器类实现ShouldQueue并在侦听器类中包含队列方法,如下所示。
/**
* Push a new job onto the queue.
**/
public function queue($queue, $job, $data)
{
return $queue->pushOn('queue-name', $job, $data);
}