2

我正在开发一个 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。即使使用队列来处理统计信息或通知,我也需要一个集中的地方,所有控制器都可以在其中发送信息,以便写入日志并存储统计信息。

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

4

1 回答 1

1

我认为您可以使用请求过滤器After适合您),尽管我从未尝试在Symfony2框架之外使用它们。

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

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

希望这能在这里有所启发:)

于 2015-09-03T14:05:08.833 回答