Jakarta ee 消息驱动bean是否适用于此需求?

Jakarta ee 消息驱动bean是否适用于此需求?,jakarta-ee,ejb,ejb-3.0,message-driven-bean,Jakarta Ee,Ejb,Ejb 3.0,Message Driven Bean,基本上,我的web应用程序中有一个长时间运行的任务的问题。当前,此任务由EJB执行,该EJB在执行任务时阻塞(任务是一个外部程序,EJB只是等待结果) 根据这一点,我考虑将消息驱动Bean与JMS队列一起使用 我的问题是:这种方法的优点是什么?如果我将EJB的调用方法注释为@Asychnronous,我难道不会拥有与MDB相同的特性吗?JMS/MDB方法的唯一优点是不会丢失挂起的作业吗?在资源管理方面,让EJB等待任务或MDB的结果更好吗?我已经为这种模式使用了很多JMS,原因是在EJB3.1之

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

根据这一点,我考虑将消息驱动Bean与JMS队列一起使用


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

我已经为这种模式使用了很多JMS,原因是在EJB3.1之前,根本不可能对会话bean进行异步调用。这就是为什么在现有的应用程序中经常会发现这样的代码

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

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

我在这个模式中使用了很多JMS,原因是在EJB3.1之前,根本不可能对会话bean进行异步调用。这就是为什么在现有的应用程序中经常会发现这样的代码

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

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

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