Основываясь на документации по событиям 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 секунд, так что это больше не происходит.
Однако таблица заданий никогда не получает строку в ней, и когда я запускаю работника очереди, ничего не происходит, задание не выполняется.
Я также пытался скопировать файл config / queue.php из Laravel в мое приложение lumen, но, похоже, это не имеет значения. Раньше эта работа случалась, когда она была в драйвере синхронизации, и когда я не использовал ShouldQueue.