MDB 和 JMS 的区别

Posted

技术标签:

【中文标题】MDB 和 JMS 的区别【英文标题】:Difference between MDB and JMS 【发布时间】:2011-06-09 15:33:12 【问题描述】:

请告诉我有什么区别:

Message Driven Beans (MDB) Java Message Service (JMS)

【问题讨论】:

【参考方案1】:

JMS 和消息驱动 bean 不是非此即彼的选择,两者是互补的。

JMS 是用于传递消息的 API 和技术。消息驱动 bean (MDB) 是一种 API,用于以 EJB 样式接收 JMS 消息作为事件。处理 JMS 消息的方式有很多种,MDB 只是其中一种。

来自JavaEE tutorial:

消息驱动的 bean 可以实现任何消息类型。最常见的是,它们实现了 Java 消息服务 (JMS) 技术。

顺便说一句,您的主题与 MBean 相关 - 这是完全不同的(指的是 JMX API),与 JMS 无关。

【讨论】:

+1 - 关于 MBean 的要点;它造成了问题和文本之间的不和谐。 @JavaUser:不是“建立在之上”,不,这两个 API 之间没有耦合。这是 MDB 最常见的用法 - 它们通常实现 MessageListener 接口。 @skaffman 我看到原始问题已被编辑,所以你的最后一句话失去了意义——但这就是把我带到这里的东西;您的评论和其他帖子 (theserverside.com/news/thread.tss?thread_id=31199) 帮助回答了我的问题。谢谢!【参考方案2】:

JMS 是 Java 消息服务规范;它是 Java EE 中队列和主题的 API。

我熟悉的 MDB 通常实现 javax.jms.MessageListener 接口,将主题或队列侦听器封装到由 Java EE 容器管理的组件中。

但是在 cmets 中向我指出这不是必需的; MDB 可用作 Java 连接器 API 的一部分。

【讨论】:

''MDB 是在 JMS API 之上构建的。'' - 抱歉,这不正确。 JMS 是 MDB 的(异步)消息传递的通用提供者,但 MDB 可以充当任何提供 JCA 资源适配器的服务的端点(侦听器)。 MDB 绝不会建立在 JMS API 的任何部分之上。 我只在 JMS 中使用过它们;我不知道 JCA 连接。在我看来,“在上面”意味着“使用 MessageListener 接口”,它是一个 JMS 包。您的回答当然更完整,但“一点也不”对我来说似乎太过分了。我很想看到有人将 MDB 用于 JMS 以外的东西的生产引用。

以上是关于MDB 和 JMS 的区别的主要内容,如果未能解决你的问题,请参考以下文章

JavaEE- 带有 JMS 和 MDB 的消息传递系统

ACCDB 和 MDB 文件格式之间的区别

MDB 和 SDF 文件有啥区别?

JMS 和 CORBA 的区别?

Mule ESB VM和JMS组件之间的主要区别是啥

jboss.jms 和 jboss.mq 有啥区别?