【问题标题】:JMS MDB or ScheduledThreadPoolExecutor for asynchronous tasks用于异步任务的 JMS MDB 或 ScheduledThreadPoolExecutor
【发布时间】:2013-01-29 11:52:02
【问题描述】:

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

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

【问题讨论】:

    标签: multithreading asynchronous ejb jms message-driven-bean


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-03-12
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      • 2014-08-24
      • 2023-03-11
      • 2016-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多