异步Symfony事件


Async Symfony events

我正在尝试使用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

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

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

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