1

基本上,我的 Web 应用程序中存在长时间运行任务的问题。当前,此任务由 EJB 执行,该 EJB 在执行任务时处于阻塞状态(任务是外部程序,EJB 只是等待结果)。

现在根据这篇文章,我想到了将消息驱动 Bean 与 JMS 队列一起使用。

我的问题:这种方法的优点是什么?如果我将 EJB 的调用方法注释为@Asychnronous我不会拥有与 MDB 相同的功能吗?JMS/MDB 方法的唯一优势是不会丢失待处理作业的特性吗?就资源管理而言,让 EJB 等待任务结果还是让 MDB 更好?

4

1 回答 1

1

我在这种模式中使用了很多 JMS,原因是在 EJB 3.1 之前,根本不可能对 Session Beans 进行异步调用。这就是为什么您可能经常在现有应用程序中找到此类代码的原因。

在 EJB 上使用异步调用的好处是更易于设置(使用 JMS 并不复杂,但您需要创建资源等)。如果您在可用性和可伸缩性是重要主题的环境中运行,使用 JMS 有几个好处:

  • 如果您考虑到应用服务器崩溃,让 JMS 消息持久化有时会很有趣。
  • 更重要的是,在我看来,使用 JMS 可以在 JMS 队列后面添加几个“处理”节点,如果您的处理时间较长且负载增加,则可以轻松添加容量(请注意,这也可以通过一些如果您使用远程会话 bean,应用程序服务器,但它不是那么简单)。
于 2012-10-25T20:43:45.580 回答