首页 > 解决方案 > 如何确保在开始下一个事件之前执行并完成同一事件的多个 Laravel 侦听器?

问题描述

我有一个 Laravel 5.7(带有 PHP 7.2)应用程序,它使用带有 Redis 队列的事件和侦听器。我有一些工作人员消耗队列并执行侦听器。

这是我在课堂上的事件和听众互动EventServiceProvider

protected $listen = [
    SavedObject::class => [
        Listener1::class,
        Listener2::class,
        Listener3::class,
    ],
];

我的问题是我需要在Listener2执行之前执行并完成Listener3。Laravel 确保侦听器按顺序执行,但如果我有多个工作人员,Listener2则会执行,在它完成之前,另一个工作人员执行Listener3并破坏一切。

如何确保Listener2在开始Listener3执行之前完成?也许是一种使用同一个工作人员执行同一事件的所有侦听器以确保这一点的方法?

标签: phplaravellaravel-5eventslistener

解决方案


您可以创建一个“链”,当 Listener1 结束时触发 Listener2,然后触发 Listener3

Event::fire("Eventname", $attributes);

推荐阅读