Асинхронные события Symfony

1

Я пытаюсь использовать 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
  • 0
    event: fervo.defer это не должно быть event: fervo.defer в YML?
  • 0
    я понимаю это как событие, которое я хочу выполнить, fervo.defer - это оболочка для моего события ... но я совсем не уверен
Показать ещё 1 комментарий
Теги:
events
rabbitmq

1 ответ

0

Читая документы, вы должны исправить services.yml:

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

Замените fervo.defer первым значением, переданным методу dispatch() если хотите, это имя отправленного события.

  • 0
    Но вот так я собираюсь отправить событие fervo.defer , но событие и функция save.data никогда не будут выполнены
  • 0
    Так что вам нужно будет позвонить -> dispatch ('save.data', $ event). Строка в диспетчере должна соответствовать имени события в YML. Предлагаю вам посмотреть документы Symfony о рассылке событий
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню