Symfony:JMS 作业队列捆绑作业监听器
Symfony : JMS Job queue Bundle Job Listener
是否可以在 Symfony 中从 JMS-Job-Queue-Bundle 设置作业状态更改事件侦听器?
我正在尝试在作业失败时更新我的数据库。
您需要一个来自 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
}
});
您也可以为此事件侦听器创建单独的 class 并像这样使用它:
$listener = new YourListener();
$dispatcher->addListener('jms_job_queue.job_state_change', array($listener, 'onStateChange'));
而您的 YourListener
class 必须如下所示:
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 项目,你可以使用更方便的方法。只需在 services.yml
中定义您的 YourListener
class 并使用标签 kernel.event_listener
:
进行标记
your_listener:
class: AppBundle\EventListener\YourListener
tags:
- { name: kernel.event_listener, event: jms_job_queue.job_state_change, method: onStateChange }
是否可以在 Symfony 中从 JMS-Job-Queue-Bundle 设置作业状态更改事件侦听器? 我正在尝试在作业失败时更新我的数据库。
您需要一个来自 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
}
});
您也可以为此事件侦听器创建单独的 class 并像这样使用它:
$listener = new YourListener();
$dispatcher->addListener('jms_job_queue.job_state_change', array($listener, 'onStateChange'));
而您的 YourListener
class 必须如下所示:
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 项目,你可以使用更方便的方法。只需在 services.yml
中定义您的 YourListener
class 并使用标签 kernel.event_listener
:
your_listener:
class: AppBundle\EventListener\YourListener
tags:
- { name: kernel.event_listener, event: jms_job_queue.job_state_change, method: onStateChange }