是否可以在Symfony中的JMS-Job-Queue-Bundle中设置作业状态更改的事件侦听器? 我正在尝试在作业失败时更新我的数据库。
答案 0 :(得分: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
}
});
此外,您可以为此Event侦听器创建单独的类,并使用它:
$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 }