Я пытаюсь использовать https://github.com/fervo/FervoDeferredEventBundle, чтобы иметь асинхронные события для хранения данных в моей БД. Событие добавляется в RabbitMQ Queue правильно, но прослушиватель событий и само событие никогда не выполняются.
Я стараюсь в обоих направлениях: сначала позволяю слушателю выполнять эту работу, а также рассылать вручную задержанного.
Есть идеи? Спасибо!
в моем контроллере:
$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()
если хотите, это имя отправленного события.
fervo.defer
, но событие и функция save.data
никогда не будут выполнены
event: fervo.defer
это не должно бытьevent: fervo.defer
в YML?