异步Symfony事件

时间:2015-11-17 17:10:04

标签: php symfony events rabbitmq

我尝试使用https://github.com/fervo/FervoDeferredEventBundle以便让异步事件在我的数据库中存储数据。事件正确地添加到RabbitMQ队列,但事件监听器和事件本身永远不会被执行。

我尝试两种方式:首先让听众完成工作,并手动调度deferevent。

有什么想法吗? 谢谢!

我的代码:

在我的控制器中:

$event = new DeferEvent('save.data', new SaveDataEvent($data));
$this->get('event_dispatcher')->dispatch('fervo.defer', $event);

SaveDataEvent.php

<?php

namespace AppBundle\Event;

use Symfony\Component\EventDispatcher\Event;

class SaveDataEvent extends Event
{
    protected $data;

    public function __construct($data)
    {
        $this->data = $data;
    }

    public function getData()
    {
        return $this->data;
    }

    public function saveData()
    {
        $data = $this->getData();
        // do more stuff
    }
}

SaveDataListener.php

<?php

namespace AppBundle\EventListener;

use AppBundle\Event\SaveDataEvent;

class SaveDataListener
{

    /**
     * @var SaveDataEvent
     */
    public function onSendData(SaveDataEvent $event)
    {

        $data = $event->saveData();
    }
}

services.yml

app.save_data_listener:
        class: AppBundle\EventListener\SaveDataListener
        tags:
            -
                name: kernel.event_listener #fervo_deferred_event.listener
                event: send.data

1 个答案:

答案 0 :(得分:0)

阅读文档,您应该修复services.yml

app.save_data_listener:
    class: AppBundle\EventListener\SaveDataListener
    tags:
        name: fervo_deferred_event.listener
        event: fervo.defer

如果您愿意,将fervo.defer替换为传递给dispatch()方法的第一个值,它是调度事件的名称。