Здравствуйте, хорошие разработчики,
Я пытался использовать решение из Этот вопрос , но он не решил мою проблему, поэтому я задаю его как отдельный вопрос.
TL;DR
- Я хочу, чтобы слушатели моего подписчика выполнялись в очереди асинхронно. Мой подписчик вызывает метод из другого класса для каждого события. Я пытался добавить implements ShouldQueue
в мой SubscriberClass | Мой класс слушателя | метод переименован в handle
в каждом классе, но ничего не работает. они по-прежнему выполняются синхронно без очереди.
У меня есть класс подписчика на событие: TesterAPI
. Я добавил его в массив EventServiceProvider
subscribe
.
У меня есть класс событий SourceAPIEvents
class SourceAPIEvents
{
const PROJECT_CREATED = 'project.created';
const PROJECT_PAUSED = 'project.paused';
const PROJECT_RESUME = 'project.resume';
const PROJECT_CLOSED = 'project.closed';
public $project;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(Project $project)
{
$this->project = $project;
}
}
TesterAPI
- Абонент
class TesterAPI implements ShouldQueue
{
/**
* Register the listeners for the subscriber.
*
* @param \Illuminate\Events\Dispatcher $events
*/
public function subscribe($events)
{
$events->listen(
SourceAPIEvents::PROJECT_CREATED,
'App\Listeners\Internal\Project\SourceAPI\Tester\ProjectCreate@handle'
);
$events->listen(
SourceAPIEvents::PROJECT_RESUME,
'App\Listeners\Internal\Project\SourceAPI\Tester\ProjectResume@handle'
);
$events->listen(
SourceAPIEvents::PROJECT_PAUSED,
'App\Listeners\Internal\Project\SourceAPI\Tester\ProjectPause@handle'
);
$events->listen(
SourceAPIEvents::PROJECT_CLOSED,
'App\Listeners\Internal\Project\SourceAPI\Tester\ProjectClose@handle'
);
}
}
Вот мои классы слушателей:
class ProjectCreate extends TesterBase implements ShouldQueue
{
public function handle(SourceAPIEvents $sourceAPIEvent)
{
//Do Something
}
}
class ProjectPause extends TesterBase implements ShouldQueue
{
public function handle(SourceAPIEvents $sourceAPIEvent)
{
//Do Something
}
}
class ProjectResume extends TesterBase implements ShouldQueue
{
public function handle(SourceAPIEvents $sourceAPIEvent)
{
//Do Something
}
}
Я называю эти события вот так
event(SourceAPIEvents::PROJECT_CREATED, new SourceAPIEvents($project));
event(SourceAPIEvents::PROJECT_RESUME, new SourceAPIEvents($project));
Помогите мне понять, что я делаю неправильно.