【发布时间】:2020-03-25 07:53:32
【问题描述】:
我有一个 Laravel 5.7(带有 PHP 7.2)应用程序,它使用带有 Redis 队列的事件和侦听器。我有一些工作人员消耗队列并执行侦听器。
这是我在EventServiceProvider 类中的事件和听众互动:
protected $listen = [
SavedObject::class => [
Listener1::class,
Listener2::class,
Listener3::class,
],
];
我的问题是我需要在 Listener3 甚至执行之前执行并完成 Listener2。 Laravel 确保侦听器按顺序执行,但如果我有多个工作人员,Listener2 会被执行,在它完成之前,另一个工作人员会执行Listener3,它会破坏一切。
如何确保Listener2 在开始执行Listener3 之前完成?
也许有一种方法可以使用同一个工作人员执行同一事件的所有侦听器以确保这一点?
【问题讨论】:
-
为什么不直接从第一个监听器中调用后续监听器呢?如果函数必须以精确的顺序执行,那么最好将它们包含在单个侦听器中。
-
最好的方法是什么?因为我不想为此创建另一个 Event 类。有没有办法在另一个里面调用一个监听器?
-
只要不让监听器排队,它们就会按照指定的顺序依次执行。
标签: php laravel laravel-5 events listener