2009-01-31 28 views
5

我目前有一个tomcat容器 - 在其上运行的servlet侦听请求。我需要将HTTP请求的结果提交给作业队列,然后再进行异步处理。我希望每个“工作”在数据库中连续保存,以便在出现故障时进行跟踪和恢复。我一直在做很多的阅读。这里是我的选择(注意,我必须使用开源的东西来处理所有事情)。来自Servlet的Java中的异步处理

1)JMS - 使用ActiveMQ的(但谁是作业的消费者在这种情况下另一个servlet)

2)有我的要求创建一个数据库中的行?在我的Tomcat容器中有一个独立的servlet,它始终运行 - 它使用Quartz Scheduler或java.util.concurrent中提供的实用程序来持续处理作为作业的行(使用线程池)。

我倾向于后者,因为查看JMS文档让我头疼,而我知道它是一个更强大的解决方案,我需要相对快速地实现这一点。在任何情况下,在部署此服务器的早期阶段,我都没有预料到会有大量的负载。

很多人都说Spring或许对1或2都有好处。但是我从来没有用过Spring,我甚至都不知道如何开始使用它来解决这个问题。任何关于如何在不需要重写我的整个项目的情况下进入的指针都会很有用。

否则,如果你可以衡量选项1或2,那也是有用的。

说明:异步过程将屏幕抓取第三方网站,并向原始请求者发送消息通知。第三方网站有点片面和缓慢,这就是为什么它将作为一个异步过程处理(内置几个重试尝试)。我也将从该网站提取文件并将其存储在S3中。

回答

4

您的Quartz Job不需要成为Servlet!您可以将传入的作业保留在数据库中,并在主Servlet启动时启动Quartz。 Quartz Job可以是一个简单的POJO,并定期检查数据库是否有任何作业。

但是,我会建议看看春天。这并不难,学习和easy to setup within Tomcat。您可以在Spring reference documentation中找到很多有用的信息。它具有Quartz集成,这比手动完成要容易得多。

+0

我还建议春天都为石英调度和JMS消息。它会使代码更简单。 – kgiannakakis 2009-01-31 09:23:30

1

一个合适的解决方案,不需要你做大量的设计和编程,就是创建一个稍后在servlet中需要的对象,并将其序列化为一个字节数组。然后把它放在数据库的BLOB字段中,并完成它。

然后,您的处理线程可以只读内容,反序列化它并使用ressurrected对象。

但是,你可能会得到通过描述更好的答案是什么,你需要你的系统真正做到:)

+0

这是一个不错的主意。这对我来说可能会解决,因为我将存储到数据库的对象只是保存有关如何访问目标第三方站点的信息,并且具有唯一的ID,因此我可以将其路由回给用户。 – Ish 2009-01-31 23:21:45