我在工作中遇到了类似于here线程的情况。区别在于我们没有使用web服务。相反,我们使用的是一个网络应用程序。我们有一个要求,允许用户下载至少30列的8000条记录,这些记录通过jxl写入excel文件。
这是一个长时间运行的过程,由于我不知道的原因,不能异步执行。它的内存占用也很大,大约在500-800 MB之间。最重要的是,它平均需要2分10秒才能完成。
我们目前正在做的是通过jms将此需求从应用程序服务器委托到进程之外。应用服务器将请求发送给代理,然后消费者从队列中获取请求,对其进行处理,并将excel文件的url发回。
我对此有些疑虑,因为我一直在阅读关于JMS的文章,建议的大多数用例都涉及异步请求,这样用户就不必等待很长时间,比如发送电子邮件、发送审批请求、开发票。这个thread中有很多示例,建议的用例可以异步完成。因此,我们目前的解决方案听起来像是一个黑客,而不是一个真正的解决方案。
有什么建议,模式可以做,以进一步改善这一进程?
编辑:不幸的是,无法消除“同步性”--如果您可以将其称为特性的话,因为它是业务需求。因此,我正在寻找能够提高性能和减少进程堆内存使用的答案/调整/技巧/模式。
发布于 2010-11-30 01:12:35
我理解得对吗?
发送消息,
文件,返回的JMS消息,然后将该消息发送给
如果是这样的话,我同意,这是对JMS异步性质的可怕滥用。
我要做的是:
立即向用户显示包含处理请求的文本的结果页,然后
将URL发送到客户端。
发布于 2010-11-30 03:34:48
我不打算建议您如何使用JMS后端--它可能没有很好地使用,也可能使用不好--我不确定。
我们实现了一些类似的东西,下面是我们最终得到的结果(对于不同的用例,后端实现完全不同,但是“异步用户exp”匹配):
H 113
,如果状态“成功完成”,请向用户报告,其他数据(url等)用户将需要访问结果。
https://stackoverflow.com/questions/4311994
复制