База данных люмен очереди слушателя события событие исчезает

База данных люмен очереди слушателя события событие исчезает

10.10.2019 11:26:59 Просмотров 46 Источник

На основе документации по событиям Laravel у меня сложилось впечатление, что я могу создать очередь событий асинхронно, добавив "implements ShouldQueue" на слушателе.

namespace App\Listeners;

use Log;
use App\Events\MeetEntryConfirmationEvent;
use App\Mail\MeetEntryConfirmation;
use Illuminate\Contracts\Queue\ShouldQueue;

class MeetEntryConfirmationListener implements ShouldQueue
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  MeetEntryConfirmationEvent  $event
     * @return void
     */
    public function handle(MeetEntryConfirmationEvent $entryEvent)
    {
        Log::debug('Attempt to send MeetEntryConfirmationEvent');
        // Do time consuming stuff
    }
}

Мое событие реализуется таким образом:

class MeetEntryConfirmationEvent extends Event
{
    use SerializesModels;

    public $entry;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct(MeetEntry $entry)
    {
        $this->entry = $entry;
        Log::debug('Created MeetEntryConfirmationEvent');
    }
}

И я отправляю их вот так.

event(new MeetEntryConfirmationEvent($entry));

Я установил QUEUE_DRIVER в базу данных, там есть таблица заданий. Когда событие отправляется, оно, кажется, работает правильно, потому что оно немедленно возвращается. Когда я работал в режиме синхронизации, работа занимала 8 секунд, так что это больше не происходит.

Однако таблица заданий никогда не получает строку в ней, и когда я запускаю queue worker, ничего не происходит, задание не выполняется.

Я также пробовал копировать в config / queue.php из Laravel в мое приложение lumen, но это, похоже, не имеет значения. Эта работа действительно случалась, когда он был в драйвере синхронизации и когда я не использовал ShouldQueue.

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/58330601/lumen-database-queued-event-listener-event-disappears#comment103019378_58330601
боковое Примечание: вы сглаживаете это событие в прослушивателе вверху?
https://stackoverflow.com/questions/58330601/lumen-database-queued-event-listener-event-disappears#comment103020223_58330601
Я не совсем понимаю, что ты имеешь в виду?
https://stackoverflow.com/questions/58330601/lumen-database-queued-event-listener-event-disappears#comment103020973_58330601
Да, они у меня там есть. Я только что отредактировал, чтобы добавить это.

Ответы - База данных люмен очереди слушателя события событие исчезает / Lumen Database Queued Event Listener event disappears

Является ответом!
David Findlay

08.01.2020 12:53:53

Так что в конце концов я нашел проблему. Все сводится к деталям, которых нет в руководствах Lumen/Laravel.

Вам нужно добавить это в загрузочный файл Lumen в разделе с регистрациями поставщиков услуг:

$app->configure('queue');
$app->register(Illuminate\Queue\QueueServiceProvider::class);
Закрыть X