Event Dispatcher 是合适的解决方案吗?

Is an Event Dispatcher the appropriate solution?

我正在从事一个 API 项目,该项目需要在响应返回给客户端之后(或之前,具体取决于实施)发送电子邮件和存储统计信息。对于这两种情况,我都在考虑 Symfony 的 EventDispatcher 组件(我没有使用 Symfony 作为框架)所以每个控制器操作都会分派一个事件以将电子邮件添加到队列或将数据插入统计数据库 table .

所以事情看起来像这样

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

我正在考虑这个,因为我希望这个内部操作尽可能异步。对于这种情况,这是合适的解决方案吗?

编辑:正如Jovan Perovic建议的那样,我正在添加更多信息。 API 是一个 REST API,用户可以通过 Web 或移动应用程序与它进行通信,我想在不影响 API 性能的情况下记录、存储统计信息和发送通知(主要是电子邮件) ,第一个想法是在将响应返回给客户端后使用 运行 的东西,但我不知道是否可以使用 EventDispatcher。即使使用队列来处理统计信息或通知,我也需要一个集中的地方,所有控制器都可以在其中发送信息,以便写入日志并存储统计信息。

我希望我的目标现在更明确了。对不起。

我认为你可以使用 Request filtersAfter 会适合你),尽管我从未尝试在 Symfony2 框架之外使用它们。

至于异步操作,一般来说,套接字是你的朋友。您可以将逻辑外部化,方法是将数据发送到某个套接字,该套接字将相应地处理数据。 如果该处理不是必需的(例如电子邮件和统计信息),即使您的外部机制失败,您的请求也可能会完成。

我前段时间读到过关于 Gearman here(只是一个例子)这可能有助于通过创建一个单独的工作来外部化它。

希望这对这里有所启发 :)