EMS、ESB 和 MOM、JMS

Posted

技术标签:

【中文标题】EMS、ESB 和 MOM、JMS【英文标题】:EMS, ESB and MOM, JMS 【发布时间】:2011-09-28 07:01:32 【问题描述】:

下列术语有什么关系和区别?

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

【问题讨论】:

在我们公司的“管理/执行”级别总是存在 ESB 的混淆。我们购买了 Tibco 产品,他们将其吹捧为“ESB”,他们将其定义为 EMS 服务器以及可以与它们一起运行的所有应用程序(如 Business 作品)。我认为根据这个定义,.net 可以归入其中。所以 ESB - 意味着消息传递系统,但“ESB”的营销意味着与之配套的所有工具 根据 Tibco 的说法,我不同意这一点,但为了清楚起见,与高管沟通时,请使用他们所知道的。 【参考方案1】:

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

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

消息传递与 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 一起使用(反之亦然)

企业消息系统 (EMS):TIBCO 的 JMS 实现(产品名称:TIBCO EMS)

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

【讨论】:

【参考方案2】:

虽然@ag112 的答案将“EMS”扩展为“企业消息传递系统”,但首字母缩略词有点模棱两可,“EMS”的最常见扩展可能是指TIBCOEnterprise Messaging Service,这是 TIBCO 的专有支持Java Messaging Service (JMS)Specification的平台,还添加了一些专有扩展。 Enterprise Service Bus (ESB) 是一个软件中间件抽象层,它通过事件驱动且通常基于开放标准的企业“消息传递引擎”将软件组件集成到大型系统中。这些“message oriented middleware (MOM)”结构通常用于软件集成,并且很可能会在Service Oriented Architecture (SOA) 的实现中看到。

【讨论】:

【参考方案3】:

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

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

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

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

【讨论】:

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

ActiveMQ 初识ActiveMQ

Jmeter测试ActiveMQ服务

ActiveMQ初步接触-编写Demo

JMS与ActiveMQ消息数据持久化

Tomcat和(MOM或CORBA)之间有啥关系

CORBA 和 MOM 集成