【发布时间】:2015-11-17 17:10:03
【问题描述】:
我正在尝试使用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
【问题讨论】:
-
YML中不应该是
event: fervo.defer吗? -
我将其理解为我想要执行的事件,fervo.defer 是我的事件的包装器......但我完全不确定
-
还有另一种解决 Symfony 异步事件的解决方案(我们构建的)。它需要的配置更少,更方便。要使侦听器异步,您只需将
async: true属性添加到事件侦听器标记并在后台运行 enqueue:consume 命令。更多这里blog.forma-pro.com/symfony-async-eventdispatcher-d01055a255cf
标签: php symfony events rabbitmq