我一直在使用JMS Message Driven Bean
一段时间,它对异步任务非常有用。我知道有很多方法可以处理异步流程,但我很好奇使用JMS Message Driven Bean
和ScheduledThreadPoolExecutor
有什么好处?
例如,我有一个Web服务,它可以异步处理某些任务。所以我看到两个主要的区别。如果我使用ScheduledThreadPoolExecutor
我不需要应用程序服务器,我可以使用servlet容器,例如Tomcat,因为我没有使用任何EJB的东西,对于MDB我需要一个应用服务器,例如Glassfish的。但是在处理实际异步过程方面,每个ScheduledThreadPoolExecutor
和MDB
有哪些优势?
答案 0 :(得分:4)
ScheduledThreadPoolExecutor
用于计划任务,与MDB最佳对应的抽象是ExecutorService
。但回到你的问题。
MDB更重要,API更复杂,原则上它实际上是为传输数据而非逻辑而设计的。另一方面,ExecutorService
是实际线程池顶部的薄层。因此,如果您需要性能,低延迟和较小的开销,请选择普通的线程池。
MDB和JMS的唯一原因是您需要持久性和事务支持。这当然会引入更大的开销,因为每条消息都需要持久化。但是,您不会丢失排队的任何任务,甚至在处理过程中也不会因崩溃而丢失。