Является ли диспетчер событий подходящим решением?


Я работаю над проектом API, который должен отправлять электронные письма и хранить статистику после (или до, в зависимости от реализации), когда ответ был возвращен клиенту. В обоих случаях я рассматриваю компонент Symfony EventDispatcher (я не использую Symfony в качестве платформы), поэтому каждое действие контроллера будет отправлять событие, чтобы добавить электронное письмо в очередь или вставить данные в таблицу базы данных статистики.

Таким образом, эта штука будет выглядеть примерно так это

Controller 
    => Send Response to client
    => Dispatch Event email => EmailEventListener => Mail queue
    => Dispatch Event stats => StatsEventLister => Database 

Я рассматриваю это, потому что хочу, чтобы эти внутренние действия были настолько асинхронными, насколько это возможно. Является ли это подходящим решением для данного случая?

РЕДАКТИРОВАТЬ: Как Йован Перович предложил, я добавляю дополнительную информацию. API - это REST API, с которым пользователи общаются с помощью веб-приложений или мобильных приложений, и я хочу регистрировать, хранить статистику и отправлять уведомления (в первую очередь электронные письма) без ущерба для производительности API, первой идеей было использовать что-то, что запускается после возвращаю ответ клиенту, но я не знаю, возможно ли это с помощью EventDispatcher. Даже если использовать очередь для обработки статистики или уведомлений, мне нужно централизованное место, где все контроллеры могут отправлять информацию, чтобы записывать журналы и хранить статистику.

Я надеюсь, что моя цель теперь более ясна. Извините.

Author: Khriz, 2015-09-03

1 answers

Я думаю, вы могли бы использовать Фильтры запросов (After было бы подходящим для вас), хотя я никогда не пытался использовать их вне рамок Symfony2.

Что касается асинхронных операций, в общем, сокеты - ваш друг. Вы можете вывести логику наружу, отправив данные в какой-нибудь сокет, который, в свою очередь, соответствующим образом обработает данные. Если эта обработка несущественна (например, электронная почта и статистика), ваш запрос может быть завершен, даже если ваш внешний механизм выйдет из строя.

Некоторое время назад я читал о Gearman вот (просто пример), который может помочь воплотить это в жизнь, создав отдельные рабочие места.

Надеюсь, это прольет здесь немного света:)

 1
Author: Jovan Perovic, 2015-09-03 14:05:08