Я создал тестовое событие в папке \app\Events\TestEventTriggered.php:
<?php
namespace App\Events;
use App\Events\Event;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class TestEventTriggered extends Event
{
use SerializesModels;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct()
{ }
/**
* Get the channels the event should be broadcast on.
*
* @return array
*/
public function broadcastOn()
{
return [];
}
}
И прослушиватель событий в app\Listeners\ListenToMyEvent.php :
<?php
namespace App\Listeners\Events;
use App\Events\TestEventTriggered;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldBeQueued;
class ListenToMyEvent implements ShouldBeQueued
{
use InteractsWithQueue;
/**
* Create the event handler.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param TestEventTriggered $event
* @return void
*/
public function handle(TestEventTriggered $event)
{
// do some stuff
}
}
В app\Providers\EventServiceProvider.php:
protected $listen = [
'App\Events\TestEventTriggered' => [
'App\Listeners\ListenToMyEvent'
]
];
Затем я запускаю событие, например, внутри метода сохранения моей модели:
\Event::fire(new \App\Events\TestEventTriggered);
Когда я сохраняю свою модель, событие обрабатывается синхронно. Таким образом, метод дескриптора события не обрабатывается очередью.
В документах говорится о реализации контракта ShouldBeQueued в слушателе, что и имеет место в моем слушателе. Однако как я должен на самом деле отправить метод дескриптора события в очередь? Какие шаги мне здесь не хватает? Где я могу объявить, в какую очередь/трубку должно быть отправлено событие? Я использую Amazon SQS для обработки своих очередей.
Документы laravel немного сбивают с толку в этом вопросе...
Любая помощь приветствуется.
php artisan queue:listen
- person yangqi   schedule 19.08.2015$job = (new SendReminderEmail($user))->onQueue('emails'); $this->dispatch($job);
- person yangqi   schedule 20.08.2015