我正在尝试使用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()
方法的第一个值,如果需要的话,它是调度事件的名称。