菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
2561
0

关于 Laravel 框架事件系统的一点认识

原创
05/13 14:22
阅读数 2160

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',
],

二、测试过程

测试过程主要对事件监听器是否使用队列,使用不同队列等情况进行测试。

  • TestListener1TestListener2都不使用队列。

关于 Laravel 框架事件系统的一点认识

  • TestListener1TestListener2使用相同队列。

关于 Laravel 框架事件系统的一点认识

  • TestListener1TestListener2使用不同队列。

关于 Laravel 框架事件系统的一点认识

  • TestListener1使用队列 ,TestListener2不使用队列。

关于 Laravel 框架事件系统的一点认识

三、测试结论

Laravel的事件系统,当一个事件有多个事件监听器的时候,事件的执行顺序如下:

  • 都使用相同队列,或都不使用队列时,多个事件按同步顺序执行,即A执行完后才执行B
  • 多个事件使用不同队列时,事件之间按异步方式执行,即A、B会同时执行;如果有某些事件使用同一队列,则同一队列中的按同步方式执行。

不足指出,望大家讨论批评指正!

发表评论

0/200
2561 点赞
0 评论
收藏