Multithreading 异步任务的JMS MDB或ScheduledThreadPoolExecutor

Multithreading 异步任务的JMS MDB或ScheduledThreadPoolExecutor,multithreading,asynchronous,ejb,jms,message-driven-bean,Multithreading,Asynchronous,Ejb,Jms,Message Driven Bean,我已经使用JMS消息驱动Bean一段时间了,它对于异步任务非常有效。我知道有很多方法可以处理异步进程,但我只是好奇使用JMS消息驱动Bean和ScheduledThreadPoolExecutor有什么好处 例如,我有一个web服务,它异步处理一些任务。所以我看到了两个主要的区别。如果我要使用ScheduledThreadPoolExecutor,我不需要应用服务器,我可以为Tomcat使用servlet容器,因为我没有使用任何EJB东西,对于MDB,我需要一个应用服务器,例如Glassfish

我已经使用JMS
消息驱动Bean
一段时间了,它对于异步任务非常有效。我知道有很多方法可以处理异步进程,但我只是好奇使用JMS
消息驱动Bean
ScheduledThreadPoolExecutor
有什么好处

例如,我有一个web服务,它异步处理一些任务。所以我看到了两个主要的区别。如果我要使用ScheduledThreadPoolExecutor,我不需要应用服务器,我可以为Tomcat使用servlet容器,因为我没有使用任何EJB东西,对于MDB,我需要一个应用服务器,例如Glassfish。但是就处理实际的异步进程而言,与每个
ScheduledThreadPoolExecutor
MDB
相比,有哪些优点?

用于调度任务,与MDB相对应的最佳抽象是。回到你的问题上来

MDB更重,API更复杂,原则上它实际上是为传输数据而设计的,而不是逻辑。另一方面,
ExecutorService
是实际线程池顶部的一个薄层。所以,如果您需要性能、低延迟和小开销,请选择普通线程池

MDB和JMS的唯一原因是当您需要持久性和事务支持时。这当然会带来更大的开销,因为每个消息都需要持久化。但是你不会松懈任何排队的任务,甚至在处理中间的任务不会因为崩溃而丢失。

< P>用于调度任务,抽象最好与MDB对应。回到你的问题上来

MDB更重,API更复杂,原则上它实际上是为传输数据而设计的,而不是逻辑。另一方面,
ExecutorService
是实际线程池顶部的一个薄层。所以,如果您需要性能、低延迟和小开销,请选择普通线程池

MDB和JMS的唯一原因是当您需要持久性和事务支持时。这当然会带来更大的开销,因为每个消息都需要持久化。但是,您不会松懈任何排队的任务,甚至在处理中间的任务不会因为崩溃而丢失。