用Java创建一个听力服务

时间:2011-06-07 17:24:23

标签: java

我有一个带有架构的webapp我并不感到兴奋。特别是,我有一个servlet处理一个非常大的文件上传(通过commons-fileupload),然后处理该文件,并将其传递给服务/存储库层。

向我建议的是,我只是让我的servlet上传文件,后端的服务进行处理。我喜欢这个想法,但我不知道如何去做。我不认识JMS。

其他细节: - 应用程序是一个GWT应用程序,使用MVP架构拆分为推荐的客户端/服务器/共享子包。 - 目前,我只在GWT托管模式下运行,但我打算在不久的将来转移到Tomcat。

我非常愿意学习任何我需要的东西以使其工作(事实上,这是编写应用程序的重点)。我不希望任何人为我编写代码,但是有人能指出我正确的方向开始吗?

4 个答案:

答案 0 :(得分:1)

此方案有很多选项,但最简单的方法可能就是将上传的文件复制到文件系统上的已知位置,并让后台守护程序在找到位置和进程时监视它。

答案 1 :(得分:1)

@Jason,有很多方法可以解决你的问题。 i)将文件数据转储到列类型为BLOB的数据库中。并有一个DB轮询线程(在特定时间段之后)轮询表中新插入的文件。 ii)将文件转储到文件系统并进行文件监控过程。

i)对i)的好处是DB是集中且快速的资源,而文件系统本质上是慢速且非中心化的。

所以基本上servlet会转储到DB或文件系统。现在关于谁将处理该转储文件: - a)它可以是上面讨论的监控过程,或者b)你可以使用本质上异步的JMS,这意味着servlet会在队列中放置一个触发事件,异步触发新的处理线。 如果您对监控过程没有问题,那么不要在您的系统中不必要地引入JMS。

答案 2 :(得分:1)

这听起来很有趣,我很熟悉:)。我们以类似的方式做到这一点。

我们有四个项目,所有四个项目都包括文件上传和文件处理(图像/视频/ PDF /文档)等。所以我们创建了一个项目来处理所有文件处理,如下所示:

所有四个项目和文件处理器都使用Amazon S3 / Our File Storage进行文件存储,因此文件存储在所有五个项目中共享。

我们向文件处理器发出请求,通过http请求提供XML格式的详细信息,其中包括S3 / Stoarge上的文件路径,aws身份验证详细信息,文件转换/处理参数。文件处理器处理并将处理过的文件放在S3/Storage上,使用已处理的文件详细信息构造XML并通过响应发送XML。

我们使用Spring Frameowrk和Tomcat。

答案 3 :(得分:0)

由于这是最重要的学习练习,因此您需要选择一个易于使用的JMS提供程序。这个discussion仅在一年前提出了FFMQ。

由于您使用简单的处理器,因此可以保持简单并使用JMS队列。

在最简单的形式中,servlet发送的每条消息都必须对应一个作业。您可以将上载的整个有效负载放在消息中,也可以只发送文件名作为消息中内容的引用。这些是您稍后可以重构的细节。

在处理器端,如果您使用的是Java EE,则可以使用MessageBean。如果不是,那么我会建议一个3 JVM解决方案 - 一个用于Tomcat,JMS服务器和消息处理器。本文包含message consuming client

的基础知识