我正在开发一个API项目,该项目需要在响应返回给客户端之后(或在执行之前)发送电子邮件和存储统计信息。对于这两种情况,我正在考虑使用Symfony的EventDispatcher组件(我没有使用Symfony作为框架),因此每个控制器操作都会调度一个事件来向队列添加电子邮件或将数据插入统计数据库表。
所以事情看起来像这样
Controller
=> Send Response to client
=> Dispatch Event email => EmailEventListener => Mail queue
=> Dispatch Event stats => StatsEventLister => Database
我正在考虑这个因为我希望这些内部动作尽可能地异步。对于这种情况,这是合适的解决方案吗?
编辑:正如Jovan Perovic建议我添加更多信息。 API是一个REST API,用户通过Web或移动应用程序与之通信,我想记录,存储统计信息和发送通知(主要是电子邮件),而不会影响API的性能,第一个想法是使用返回后运行的东西对客户端的响应,但我不知道是否可以使用EventDispatcher。即使使用队列来处理统计信息或通知,我也需要一个集中的地方,所有控制器都可以发送信息,以便记录日志和存储统计信息。
我希望我的目标现在更清楚了。遗憾。
答案 0 :(得分:1)
我认为您可以使用Request filters(After
适合您),但我从未尝试在Symfony2
框架之外使用它们。
对于异步操作,一般来说,套接字是你的朋友。您可以通过将数据发送到某个套接字来外部化逻辑,该套接字将依次处理数据。 如果该处理不是必需的(例如电子邮件和统计信息),即使您的外部机制失败,您的请求也可能已完成。
前段时间我读过Gearman
here(仅举例),这可能有助于通过创建单独的工作来将其外化。
希望这可以解释一下:)