Tomcat 线程还是JMS哪个更好?

Tomcat 线程还是JMS哪个更好?,tomcat,servlets,multithreading,jms,Tomcat,Servlets,Multithreading,Jms,如果我想在多用户环境(通过TomcatServlet)中运行一个流程(完成此流程所需的时间以小时为单位),那么在哪个环境中实现此流程更好? 1) 在线程中或2)在JMS中 优点和缺点是什么?不太清楚您打算如何使用JMS,通常的做法是让客户端在队列上弹出请求,并让一些(可配置的)工作线程将请求拉出并为其提供服务。在我的例子中,我会使用MDB作为运行这些工作线程的机制,但这只是一个实现细节 所以我不认为线程和JMS是替代品,更多的是JMS为您提供了一种可控的线程使用方式。几乎可以肯定的是,您需要避免

如果我想在多用户环境(通过TomcatServlet)中运行一个流程(完成此流程所需的时间以小时为单位),那么在哪个环境中实现此流程更好? 1) 在线程中或2)在JMS中
优点和缺点是什么?

不太清楚您打算如何使用JMS,通常的做法是让客户端在队列上弹出请求,并让一些(可配置的)工作线程将请求拉出并为其提供服务。在我的例子中,我会使用MDB作为运行这些工作线程的机制,但这只是一个实现细节

所以我不认为线程和JMS是替代品,更多的是JMS为您提供了一种可控的线程使用方式。几乎可以肯定的是,您需要避免一次处理太多的请求,因此您在概念上需要队列,也可以使用JMS来实现这一点

要弄清楚的各种细节,比如如何传达结果,确保浏览器不会挂几个小时。某种Ajax轮询,或者Comet推送


还有一个想法——一块处理过程需要几个小时?这可能得益于将其分解为多个步骤(同样由JMS队列pehaps中介)。那样的话,撞车并不会让一切回到原点

如果我正确理解您的选项,请执行第二个选项,即: 让Tomcat上的servlet向JMS客户机(最好是JMS容器中的MDB)发送消息。在那里,发射漫长的过程。
这样做而不是在servlet中创建一个新线程(选项1),这确实不是推荐的方法。

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

如果您一次只能有几个请求,线程就可以了。一个维护倒计时锁存器的简单后台线程可用于处理任何溢出

如果您需要大量请求,那么JMS可能更适合您的任务