Возможно ли настроить прослушиватель событий на изменение статуса задания из JMS-Job-Queue-Bundle в Symfony? Я пытаюсь обновить мою базу данных, когда работа завершилась неудачно.Symfony: JMS Job queue Bundle Job Listener
0
A
ответ
4
Вам нужен диспетчер событий из Symfony. Вы можете получить его из контейнера по имени event_dispatcher
:
$dispatcher = $container->get('event_dispatcher');
Тогда вы можете зарегистрировать прослушиватель событий, как закрытие:
use JMS\JobQueueBundle\Event\StateChangeEvent;
use JMS\JobQueueBundle\Entity\Job;
$dispatcher->addListener('jms_job_queue.job_state_change', function (StateChangeEvent $event) {
if ($event->getNewState() == Job::STATE_FAILED) {
$job = $event->getJob();
// do what you need here
}
});
Также вы можете создать отдельный класс для этого слушателя событий и использовать его, как это :
$listener = new YourListener();
$dispatcher->addListener('jms_job_queue.job_state_change', array($listener, 'onStateChange'));
И ваш YourListener
класс должен выглядеть следующим образом:
use JMS\JobQueueBundle\Event\StateChangeEvent;
use JMS\JobQueueBundle\Entity\Job;
class YourListener
{
// ...
public function onStateChange(StateChangeEvent $event)
{
if ($event->getNewState() == Job::STATE_FAILED) {
$job = $event->getJob();
// do what you need here
}
}
}
Также, если у вас есть проект Symfony, вы можете использовать более удобный способ. Просто определите YourListener
класс в services.yml
и пометить его с тегом kernel.event_listener
:
your_listener:
class: AppBundle\EventListener\YourListener
tags:
- { name: kernel.event_listener, event: jms_job_queue.job_state_change, method: onStateChange }
Спасибо, главная проблема заключалась в том, что я не мог найти имена событий работы. –
Вы просто забыли в вашем примере suscriber в services.yml в том случае, если бы: my_bundle.job_status_change: класс: MyBundle \ EventListener \ YourListener теги: - {имя: kernel.event_listener, событие: jms_job_queue.job_state_change , метод: onStateChange} –
О, извините. Я просто забыл, что вы используете Symfony. Я скоро обновлю ответ. –