如果我想在多用户环境中运行一个进程(完成此进程所需的时间是几小时)(通过tomcat-servlet)哪个更好地实现此进程? 1)在线程中或2)在JMS中 有什么优点和缺点?
答案 0 :(得分:3)
不确定您是如何设想使用JMS的,就像客户端在队列中弹出请求的方式一样,并且有一些(可配置的)工作线程将请求关闭并为其提供服务。在我的情况下,我有一个MDB作为获取这些工作线程的机制 - 但这只是一个实现细节。
所以我没有看到Threads和JMS作为替代品,更像是JMS为您提供了一种可控制的线程使用方式。您几乎肯定需要避免允许同时处理太多请求,因此您在概念上需要队列,也可以使用JMS来实现该目标。
要弄清楚各种细节,比如如何沟通结果,确保浏览器不会闲逛数小时。某种Ajax民意调查,或Comet推动可能吗?
另一个想法 - 一小块处理需要几个小时?这可能会受益于被分解为多个步骤(再次由JMS队列pehaps调解)。这样一来,崩溃就不会把所有东西都送回原点。
答案 1 :(得分:0)
如果我理解你的选择权,那就做第二个选择,即: 让Tomcat上的servlet向JMS客户端发送消息(最好是JMS容器中的MDB)。在那里,解雇漫长的过程。 这样做而不是在servlet中创建一个新线程(选项1),这是不推荐的做事方式。
答案 2 :(得分:0)
我认为关键因素是:您希望看到的最大并发请求数是多少,以及您处理溢出的策略是什么?
如果你一次只有一些请求,那么线程就可以了。维护CountdownLatch的简单后台线程可用于处理任何溢出。
如果您需要大量请求,那么JMS可能更适合您的任务。