Это небольшой рассказ, который познакомит вас с тем, что мы недавно сделали в рамках проекта Enqueue. Диспетчер асинхронных событий объединен.

Как вы уже могли догадаться, он позволяет отправлять события асинхронно. Событие преобразуется в сообщение и отправляется в очередь сообщений. Потребитель получает сообщение, конвертирует его обратно и отправляет.

Почему эта функция так важна? Она дает вам простой и удобный способ регистрации асинхронных слушателей. Отметьте все, что не требует внимания пользователя, как асинхронное. Это увеличивает производительность, повышает отказоустойчивость, лучше масштабирует нагрузку.

Вот лишь несколько примеров, в которые он может хорошо вписаться: отправка электронных писем, обработка изображений, создание PDF-файлов, изменение данных аудита, журналы HTTP-запросов, журналы проблем безопасности или исключения.

Самое замечательное: нам удалось сделать процесс полностью прозрачным. В вашем текущем коде нечего менять!

  • Вы, как обычно, отправляете события, используя ваш любимый event_dispatcher service.
  • Объект события остается прежним. Нет необходимости реализовывать какие-либо конкретные интерфейсы.
  • Слушатель тоже выглядит так же. Нет никаких специальных интерфейсов или сервисов, которые нужно внедрять, чтобы заставить его работать.

Волшебство происходит, когда вы регистрируете слушателя. Добавьте async: true в тег kernel.event_listener или kernel.event_subscriber, и он будет отправлен асинхронно. Делай это так:

Предположим, что TestAsyncLisnter выполняет тяжелую работу, и один единственный атрибут тега меняет безмерно все.

Ищете дополнительную информацию? Проверить официальный документ

Есть другие решения в Интернете. Мы проверили их все. У них общая удача. Они не работают прозрачно. Вы должны скорректировать свой код, явно вызвав специальный метод dispatchAsync или используя специальный объект события. Они привязаны к одному конкретному транспорту (AMQP или DB), где наше решение хорошо работает на всех уже поддерживаемых транспортах (AMQP, STOMP, Amazon SQS, Doctrine DBAL, Filesystem, Redis).

Попробуйте и поделитесь с нами своим мнением!

Вы также можете посетить наш корпоративный блог, чтобы узнать больше о последних тенденциях в области ИТ и загрузить некоторые полезные аналитические данные.