问题 为什么不使用Session Bean而不是Message Driven Beans?


我想知道,为什么不使用Session Bean而不是Message Driven Beans?

如果你可以从EJB调用远程方法,那么为什么还要使用Message Driven Beans(比会话bean更难开发)来发送/接收消息呢?

Message Driven Beans在哪些场景中变得有用?


9601
2017-10-01 08:54


起源

有同样的问题,我发现这很有趣 - theserverside.com/news/thread.tss?thread_id=32105 - Leo


答案:


我想知道,为什么不使用Session Bean而不是Message Driven Beans?

嗯,它们没有用于相同的目的,消息驱动的bean允许Java EE应用程序异步处理消息。

如果你可以从EJB调用远程方法,那么为什么还要使用Message Driven Beans(比会话bean更难开发)来发送/接收消息呢?

因为MDB为您提供了异步和松耦合,这在某些情况下可能是您需要/需要的:

  • 适合长期工作
  • 当资源不总是可用时
  • 当你想并行化处理时

顺便说一句,我个人总是发现MDB是最容易开发的企业Bean。

Message Driven Beans在哪些场景中变得有用?

往上看。

也可以看看


12
2017-10-01 09:32



Merci beaucoup amigos - mohamida
我将补充说MDB不一定是异步的,它实际上是驱动通信风格的连接器。 MDB诞生于JMS之外,Connector API是从该用例中抽象出来的,但现在Connector / MDB关系实际上允许任何类型的通信。我对EJB.next有一些想法,以进一步简化MDB / Connector关系,以便Connector可以提供MDB可以使用的自己的注释,使@ActivationConfig和显式MessageListener接口的需求无关。那么像JAX-RS这样的东西可以作为Connector / MDB来完成。 - David Blevins
@David那是对的(我大大简化了)。而你所提到的是一个非常有趣的方向。非常感谢你分享这个,大卫。 - Pascal Thivent
是的,我对此感到很兴奋。有意义在博客文章中刻出来,但是因为我们正在聊天,所以我终于咬紧牙关并且这样做了 bit.ly/bym3SC  在另一方面,整个“我使用哪种bean类型”问题是我希望我们可以通过将所有内容基于@ManagedBean并让人们专注于他们想要使用的服务以及他们希望他们的bean暴露的方式来杀死的问题。 - David Blevins


消息驱动的bean侦听JMS队列 异步 与实体/会话bean不同。

这不会阻止服务器资源,因为只有当消息到达队列时才会发生处理。

除了大量的Java论坛和网站之外,维基百科还有一套很好的用例,其中MDB可以派上用场

http://en.wikipedia.org/wiki/Enterprise_JavaBean#Message_driven_beans


2
2017-10-01 09:19





两者都有不同的用途。

1)如果你想将它用于远程方法,那么只需使用Session Bean

2)但是如果响应/结果不是主要的,但是后面的消息对你来说是主要的,那么就去创建队列以使其工作并设置消息。但性能问题将存在。

如果你需要只使用方法,那么只需使用Session bean,因为它是轻量级bean。它表现出色。


2
2018-04-15 10:24