gpt4 book ai didi

java - 在 Play 2.1 (Java) 中运行后台任务的正确方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 07:38:50 25 4
gpt4 key购买 nike

在我的应用程序中,我需要处理上传的文档并将处理结果放入数据库中。
文档存储在文件系统中,元数据存储在数据库中。
对于每个文档,需要从磁盘打开和处理文件,然后相应地更新数据库中的元数据。处理可能会很昂贵并且需要很长时间。
我打算做的是:

  1. 跨N个任务,一个任务处理单个文档
  2. 每个任务都会查找最旧的“未处理”文档
  3. 任务将在数据库中将其标记为“正在进行”并开始处理
  4. 处理文档任务后将更新元数据并将其在数据库中标记为“已处理”
  5. 此后任务将转到第 2 步

假设应用程序是用 Java 而不是 Scala 编写的,那么利用 Play 和 Akka 实现这一点的正确/最简单的方法是什么?源代码示例也将受到赞赏。

最佳答案

正确的方法是“不要在 Play 应用中运行任何后台任务”。 Play 是一个用于编写 Web 应用程序的 Web 框架,根据定义,后台任务不使用 Web 界面。因此,设置一个单独的后台任务运行程序并通过 Akka 向其发送消息/事件。事实上,如果您将尽可能多的业务逻辑推送到后台任务中,您将拥有一个可扩展性更高的应用程序。

有关此模型得出逻辑结论的示例,请查看 Mongrel2 Web 服务器 http://mongrel2.org/manual/book-final.html

鉴于我们在 JVM 世界中拥有 Akka 和 Camel 等工具,并且 Play 等框架正在让我们摆脱 servlet 架构,我认为是时候追随 Mongrel2 的领导,回到更多的 3 层架构,其中 Web 应用层只做最少的工作。

如果您遵循此架构,则可以将运行后台任务所需的所有信息捆绑到一条消息中,将其发送到执行该工作的外部参与者,然后可能让该参与者向另一个将更新数据库的参与者发送完成消息。

关于java - 在 Play 2.1 (Java) 中运行后台任务的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16379252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com