Я знаю, что вы можете прослушивать мероприятия, используя before
, after
а также failing
крючки:
https://laravel.com/docs/5.6/queues#job-events
Queue::before(function (JobProcessing $event) {
// $event->connectionName
// $event->job
// $event->job->payload()
});
Я только хочу, чтобы здесь были подобраны определенные работы. Эти задания выполняются из определенного абстрактного базового класса, называемого AbstractTask
, Обычно я просто выполняю instanceof
проверьте, но что-то вроде этого не будет работать:
$job instanceof AbstractTask
Можно ли как-то пометить работу, которая будет подхвачена этими событиями работы?
редактировать
Кажется, что настоящая работа, которую я хочу (это мой собственный класс работы), может быть найдена в $event->job
вот так:
$payload = json_decode($job->getRawBody());
$data = unserialize($payload->data->command);
if ($data instanceof AbstractTask) {
dd($data);
}
Мне трудно поверить, что нет более простого способа получить базовый Job, который на самом деле обрабатывается, поэтому я также сделал проблему с Github:
Я разместил на вашем вопросе, кстати.
Не могли бы вы попробовать это и посмотреть, если resolveName
дает правильное имя класса вашей работы / задачи:
Queue::before(function (JobProcessing $event) {
$class = $event->job->resolveName();
// without an instance
if (is_a($class, AbstractTask::class, true)) {
...
}
// with an instance
$instance = app($class);
if ($instance instanceof AbstractTask) {
...
}
});
Других решений пока нет …