База данных люмен очереди слушателя события событие исчезает
На основе документации по событиям 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.




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

08.01.2020 12:53:53
Так что в конце концов я нашел проблему. Все сводится к деталям, которых нет в руководствах Lumen/Laravel.
Вам нужно добавить это в загрузочный файл Lumen в разделе с регистрациями поставщиков услуг:
$app->configure('queue');
$app->register(Illuminate\Queue\QueueServiceProvider::class);