在我的应用程序中,我需要处理上传的文档并将处理结果放入DB中 文档存储在文件系统中,元数据存储在DB中 对于每个文档,需要从磁盘打开和处理文件,而不是相应地更新DB中的元数据。加工可能很昂贵,需要很长时间 我打算做的是:
实现这个利用Play和Akka的正确/最简单的方法是假设应用程序是用Java编写的,而不是Scala?源代码示例也将受到赞赏。
答案 0 :(得分:1)
正确的方法是“不要在Play应用中运行任何后台任务”。 Play是用于编写Web应用程序的Web框架,根据定义,后台任务不使用Web界面。因此,设置一个单独的后台任务运行器,并通过Akka发送消息/事件。事实上,如果您将尽可能多的业务逻辑推送到后台任务中,您将拥有一个更具伸缩性的应用程序。
有关此模型的逻辑结论示例,请查看Mongrel2 Web服务器http://mongrel2.org/manual/book-final.html
鉴于我们在JVM世界中拥有像Akka和Camel这样的工具,并且像Play这样的框架让我们摆脱了servlet体系结构,我认为现在是时候关注Mongrel2的领导并回到更多的3层体系结构Web应用程序层只能完成最少的工作。
如果您遵循这种架构,您可以将运行后台任务所需的所有信息捆绑到一条消息中,将其发送给执行工作的外部actor,然后让该actor向另一个actor发送完成消息会更新数据库。