Symfony:JMS作业队列Bundle Job Listener

时间:2015-12-07 09:39:59

标签: symfony jobs event-listener jmsjobqueuebundle

是否可以在Symfony中的JMS-Job-Queue-Bundle中设置作业状态更改的事件侦听器? 我正在尝试在作业失败时更新我的​​数据库。

1 个答案:

答案 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 }