21

以下术语之间的关系和区别是什么?

  • 企业消息系统 (EMS)
  • 企业服务总线 (ESB)
  • 面向消息的中间件 (MOM)
  • Java 消息服务 (JMS)
4

3 回答 3

21

好问题 - 服务总线和消息传递系统之间的关键区别在于消息传递系统上的数据约定。消息系统通常让您发送所有内容:二进制 blob、XML、逗号分隔列表等。因此应用程序 A 可以向应用程序 B 发送逗号分隔的字符串,并且 B 向应用程序 C 发送一些 XML,C 向应用程序发送一些其他 XML D. 那是消息传递,但不是“服务总线”。您可以说消息传递系统是“无类型的”(动态结构),而 ESB 是“有类型的”(静态结构)。

在“服务总线”中,该总线上的所有应用程序和适配器都有一个通用数据定义(可能是带有共享 XSD 的 XML)。通用数据对象 (CDO)。任何连接的东西都必须发送符合此数据定义的信息。ESB 应该支持加载、共享和版本控制这个公共数据定义。最大的优势是您可以连接一个组件(例如 Message Broker),它就可以完成它的工作,而不必知道哪个应用程序发送了这些数据以及这些数据要去哪里。

Messaging 与 ESB 的权衡类似于其他无类型/有类型的选择:REST 与 SOAP,未经验证的 XML 与带有 XSD 的 XML,Groovy 与 Java,......有些人会喜欢额外的结构(看起来不错纸 - 经理喜欢它) - 有些人会讨厌它(当版本改变时东西会中断,为了一点点你必须更新所有东西 - 黑客不太喜欢它;-)

回到你的问题(重新排序)

  • 面向消息的中间件 (MOM):用于各种语言的软件库,带有代理(或不代理)以在应用程序之间传递“消息”。比 TCP/IP 通信更上一层楼。“消息”是结构化对象或文本字符串或二进制数据。通常,您可以通过 TCP/IP 或 UDP 获得额外的可靠性。一些示例:TIBCO RV 和 EMS、IBM MQ、Apache ActiveMQ、ZeroMQ、...

  • Java 消息服务 (JMS):MOM 的通用API的定义——人们抱怨说,当您的应用程序从 MOM 'X' 切换到 MOM 'Y' 时,您需要重写消息传递代码。如果您针对 JMS 进行编码,您可以只切换库,并且曾经与 TIBCO EMS 一起使用的同一应用程序突然与 ActiveMQ 一起使用(反之亦然)

  • Enterprise Messaging System (EMS):TIBCO对JMS的实现(产品名称:TIBCO EMS)

  • 企业服务总线 (ESB):ESB使用面向消息的中间件来集成应用程序、数据库、代理等。ESB 是添加了数据结构和结构定义管理的 MOM。将新组件连接到 ESB 时,与将其连接到 MOM 时相比,您可以期待更多的开箱即用“兼容性”。在 ESB 中,对于连接组件必须执行的操作有更高的标准。我认为 TIBCO 的 ESB 称为 ActiveMatrix。

于 2015-01-16T09:34:16.960 回答
5

虽然@ag112 的答案将“EMS”扩展为“企业消息传递系统”,但首字母缩略词有点模棱两可,“EMS”的最常见扩展可能是指TIBCO Enterprise Messaging Service,这是 TIBCO 支持Java的特定专有平台消息服务 (JMS) 规范,还添加了一些专有扩展。企业服务总线 (ESB)是一个软件中间件抽象层,它通过事件驱动且通常基于开放标准的企业“消息传递引擎”将软件组件集成到大型系统中。这些“面向消息的中间件 (MOM)面向服务的体系结构 (SOA)

于 2011-07-29T20:47:39.757 回答
5

EMS:任何允许多个应用程序通过面向消息的协议而不是 RPC 协议的解决方案因此基本上交互的应用程序更多地绑定到消息数据而不是传输。

妈妈:我再次相信它可以被视为与EMS相同。

ESB:这是设计企业消息传递系统的一种方式。另一种方式是轮辐模型。基本上,典型的消息传递系统涉及转换、中介、审计、路由和安全性等。ESB 与 hub-spoke 指定哪个组件负责哪个部分。

JMS:是Java平台提供的统一API,开发者可以直接使用JMS API,不用担心底层消息框架是什么。消息传递实现必须符合 JMS 才能由 JMS API 处理。

于 2011-07-05T09:07:19.470 回答