2

我使用 JMS 已经Message Driven Bean有一段时间了,它非常适合异步任务。我知道有很多方法可以处理异步进程,但我只是好奇使用 JMSMessage Driven Bean和有什么好处ScheduledThreadPoolExecutor

例如,我有一个异步处理一些任务的 Web 服务。所以我看到两个主要区别。如果我要使用ScheduledThreadPoolExecutor我不需要应用程序服务器,我可以为 Tomcat 使用 servlet 容器,因为我没有使用任何 EJB 的东西,对于 MDB,我需要一个应用程序服务器,例如 Glassfish。ScheduledThreadPoolExecutor但是在处理实际的异步过程方面,每个和有什么优势MDB

4

1 回答 1

4

ScheduledThreadPoolExecutor用于调度任务,与 MDB 最对应的抽象是ExecutorService. 但回到你的问题。

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

使用 MDB 和 JMS 的唯一原因是您需要持久性和事务支持。这当然会引入更大的开销,因为每条消息都需要持久化。但是您不会丢失任何排队的任务,甚至在处理过程中也不会因崩溃而丢失。

于 2013-02-13T20:10:02.970 回答