我有一个webapp,它的架构并不让我感到兴奋。具体地说,我有一个servlet,它处理非常大的文件上传(通过commons-fileupload),然后处理文件,将其传递给服务/存储库层。
我得到的建议是,我只需让我的servlet上传文件,然后由后端的服务进行处理。我喜欢这个主意,但我不知道该怎么做。我不知道JMS。
其他细节:- App是一个GWT应用程序,使用MVP架构拆分成推荐的客户端/服务器/共享子程序包。-目前,我只在GWT托管模式下运行,但我计划在不久的将来迁移到Tomcat。
我非常愿意学习任何我需要的东西来让它工作(事实上,这就是编写应用程序的意义所在)。我不期望任何人为我写代码,但是有人能给我指明正确的入门方向吗?
发布于 2011-06-08 01:33:35
对于这种情况有很多选择,但最简单的可能是将上传的文件复制到文件系统上的已知位置,并让后台守护进程在找到该文件时监视该位置和进程。
发布于 2011-06-08 01:59:16
@Jason,有很多方法可以解决你的问题。i)将您的文件数据转储到列类型为BLOB的数据库中。并且让DB轮询线程(在特定时间段之后)轮询新插入的文件的表。ii)将文件转储到文件系统中,并具有文件监视进程。
i)优于ii)的好处是,DB是集中且快速的资源,而文件系统在本质上是通用的、缓慢的和非集中的。
所以基本上servlet会转储到DB或文件系统。现在关于谁将处理被转储的文件:- a)它可以是如上所述的监控进程,或者b)你可以使用JMS,它本质上是异步的,这意味着servlet将在队列中放置一个触发器事件,这将异步地触发新的处理线程。如果您对监控过程没意见,那么就不要在系统中引入不必要的JMS。
发布于 2013-08-26 15:27:53
这对我来说听起来既有趣又熟悉:)。我们也是这样做的。
我们有四个项目,所有四个项目都包括文件上传和文件处理(图像/视频/PDF/文档)等。所以我们创建了一个单独的项目来处理所有文件处理,如下所示:
所有四个项目和文件处理器都使用Amazon S3/Our File Storage进行文件存储,因此文件存储在所有五个项目之间共享。
我们通过http请求向File Processor发出请求,以XML格式提供详细信息,其中包括S3/Stoarge上的文件路径、aws身份验证详细信息、文件转换/处理参数。文件处理器进行处理并将处理后的文件放到S3/Storage上,用处理过的文件细节构造XML,并通过响应发送XML。
我们使用Spring Frameowrk和Tomcat。
https://stackoverflow.com/questions/6269158
复制相似问题