5

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

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

2)让我的请求在数据库中创建一行。在我的 Tomcat 容器中有一个单独的 servlet,它始终运行——它使用 Quartz 调度程序或 java.util.concurrent 中提供的实用程序将行作为作业连续处理(使用线程池)。

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

很多人说 Spring 可能适用于 1 或 2。但是我从未使用过 Spring,我什至不知道如何开始使用它来解决这个问题。任何关于如何深入研究而不必重新编写我的整个项目的指示都会很有用。

否则,如果您可以权衡选项 1 或 2,那也很有用。

澄清:异步过程是屏幕抓取第三方网站,并向原始请求者发送消息通知。第三方网站有点不稳定和缓慢,这就是为什么它将作为异步过程处理(内置多次重试尝试)。我还将从该站点提取文件并将它们存储在 S3 中。

4

2 回答 2

4

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

但是,我建议看一下Spring。在 Tomcat中学习和设置并不难。您可以在Spring 参考文档中找到很多很好的信息。它具有 Quartz 集成,这比手动操作要容易得多。

于 2009-01-31T09:07:01.430 回答
1

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

然后您的处理线程可以读取内容,对其进行反序列化并使用复活的对象。

但是,通过描述您需要系统实际执行的操作,您可能会得到更好的答案 :)

于 2009-01-31T09:12:35.067 回答