关于 Laravel 框架事件系统的一点认识
Laravel的事件系统相信大家都很熟悉,在工作中也经常用到,比如用户注册时相关的业务处理,通过使用事件系统极大的方便了业务解耦。但多个事件监听器之间的任务执行顺序你清楚吗?
一、测试代码准备
事件监听器1 app\Listeners\TestListener1.php
public function handle(TestEvent $event)
{
\Log::info('监听事件测试[TestListener1]开始'.time());
sleep(10);
\Log::info('监听事件测试[TestListener1]结束'.time());
}
事件监听器2 app\Listeners\TestListener2.php
public function handle(TestEvent $event)
{
\Log::info('监听事件测试[TestListener2]开始'.time());
sleep(10);
\Log::info('监听事件测试[TestListener2]结束'.time());
}
注册事件 app\Providers\EventServiceProvider.php
'App\Events\TestEvent' => [
'App\Listeners\TestListener1',
'App\Listeners\TestListener2',
],
二、测试过程
测试过程主要对事件监听器是否使用队列,使用不同队列等情况进行测试。
TestListener1
和TestListener2
都不使用队列。
TestListener1
和TestListener2
使用相同队列。
TestListener1
和TestListener2
使用不同队列。
TestListener1
使用队列 ,TestListener2
不使用队列。
三、测试结论
Laravel的事件系统,当一个事件有多个事件监听器的时候,事件的执行顺序如下:
- 都使用相同队列,或都不使用队列时,多个事件按同步顺序执行,即A执行完后才执行B
- 多个事件使用不同队列时,事件之间按异步方式执行,即A、B会同时执行;如果有某些事件使用同一队列,则同一队列中的按同步方式执行。
不足指出,望大家讨论批评指正!
本作品采用《CC 协议》,转载必须注明作者和本文链接
谢谢,正好看到这里