2009-07-31 31 views
2

如果我想在多用户环境(通过Tomcat-servlet)中运行一个进程(完成此过程需要花费几个小时),哪个更好地实现此过程? 1)在线程或2)在JMS 有什么优点和缺点?线程或JMS哪个更好?

回答

3

不确定您使用JMS时的设想,完成的方式是让客户端在队列上弹出请求,并且有一些(可配置的)工作线程将请求关闭并对其进行维护。在我的情况下,我将有一个MDB作为让这些工作线程运行的机制 - 但这只是一个实现细节。

所以我没有看到线程和JMS的替代品,更多的JMS给你一个可控的方式来使用线程。您几乎肯定需要避免允许一次处理太多请求,因此您在概念上需要队列,可能还需要使用JMS来实现。

要弄清楚各种细节,比如如何沟通结果,确保浏览器不会在几个小时内闲逛。某种Ajax轮询,或者Comet push可能?

另外还有一个想法 - 处理几个小时的单一块?这可能会受益于被分解成若干步骤(再次由JMS队列中介)。这样一来,撞车事件并没有让所有的事情都回到原点。

0

如果我理解了您的选项,请执行第二个选项,即: 让Tomcat上的servlet向JMS客户端(最好是JMS容器中的MDB)发送消息。在那里,开启漫长的过程。 这样做,而不是在servlet中创建一个新的线程(选项1),这是真的不建议做事情的方式。

0

我认为关键因素是:您希望看到的最大并发请求数量是多少,以及您处理溢出的策略是什么?

如果你一次只有少数的请求,线程就没问题。维护CountdownLatch的简单后台线程可用于处理任何溢出。

如果您预计会有很多请求,那么JMS可能更适合您的任务。