【问题标题】:Message driven bean applicable for this requirement?消息驱动的 bean 适用于此要求吗?
【发布时间】:2012-10-13 00:33:34
【问题描述】:

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

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

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

【问题讨论】:

  • 或许阅读了Java EE Tutorial的相关章节。
  • 也许不是同一个问题,但答案的某些部分适用。 stackoverflow.com/questions/2096734/why-choosing-jms-for-asynchronous-solution-why-is-it-better-than-a-simple-enti

标签: jakarta-ee ejb ejb-3.0 message-driven-bean


【解决方案1】:

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

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

  • 如果您考虑到应用服务器崩溃,让 JMS 消息持久化有时会很有趣。
  • 更重要的是,在我看来,使用 JMS 可以在 JMS 队列后面添加几个“处理”节点,这样可以在处理时间长且负载增加的情况下轻松添加容量(注意,这也可以如果您使用远程会话 bean,则由某些应用服务器实现,但并不是那么简单)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 2017-06-13
    • 2016-08-21
    • 1970-01-01
    相关资源
    最近更新 更多