企业消息系统(EMS) 企业服务总线(ESB) 面向消息的中间件(MOM) Java消息服务(JMS)
服务总线和消息系统的关键区别在于消息系统中的数据协定。消息系统通常允许您发送各种内容:二进制大型对象、XML、逗号分隔列表等。这意味着应用程序 A 可以向应用程序 B 发送逗号分隔字符串,B 向应用程序 C 发送某些 XML,C 向应用程序 D 发送其他 XML。这就是消息传递,但不是“服务总线”。可以说消息系统是“未分类”(动态结构),而 ESB 是“分类的”(静态结构)。
在“服务总线”中,所有应用程序和适配器都有一个共同的数据定义(可能是带有共享 XSD 的 XML)。这些共同的数据对象 (CDOs) 与总线上连接的任何内容必须遵循此数据定义发送其信息。ESB 应支持加载、共享和版本化此共同数据定义。最大的优点是,您可以连接一个组件(例如消息代理),它执行其任务而无需知道哪个应用程序发送了这些数据以及这些数据要去哪里。
消息传递与 ESB 的权衡与其他未类型化/类型化选择类似:REST 与 SOAP、未经验证的 XML 与带有 XSD 的 XML、Groovy 与 Java 等等。有些人会喜欢附加的结构(看起来很漂亮,经理们喜欢它),有些人会讨厌它(版本更改时会出现问题,为了进行小的添加您必须更新所有内容-黑客不太喜欢它)。
回到你的问题(重新排序)
消息导向中间件 (MOM):各种语言的软件库,带有代理(或没有),用于在应用程序之间通信“消息”。比 TCP/IP 通信高一级。 “消息” 是结构化对象、文本字符串或二进制数据。通常比 TCP/IP 或 UDP 具有更高的可靠性。一些例子:TIBCO RV 和 EMS、IBM MQ、Apache ActiveMQ、ZeroMQ 等等。
Java 消息服务 (JMS):共同的 API 定义,用于 MOM。人们抱怨当您的应用程序从 MOM “X” 切换到 MOM “Y” 时,您需要重写消息传递代码。如果您针对 JMS 进行编码,则可以仅切换库,先前使用 TIBCO EMS 的相同应用程序突然可以使用 ActiveMQ(反之亦然)。
企业消息系统 (EMS):TIBCO 对 JMS 的实现(产品名称:TIBCO EMS)。
企业服务总线 (ESB):ESB 使用消息导向中间件来集成应用程序、数据库、代理等。ESB 是带有附加数据结构和结构定义管理的 MOM。连接新组件到 ESB 时,可以预期在开箱即用方面比连接到 MOM 更具“兼容性”。在 ESB 中,对于连接所需的组件,有更高的标准。我认为 TIBCO 的 ESB 称为 ActiveMatrix。
EMS: 任何能够让多个应用程序通过基于消息的协议而不是RPC协议进行交互的解决方案。因此,交互应用程序更加绑定于消息数据而不是传输。
MOM: 我认为它可以被视为与EMS相同。
ESB: 这是一种设计企业消息系统的方式之一。另一种方式是中心枢纽模型。基本上,典型的消息系统涉及转换、调解、审核、路由和安全等方面。ESB与中心枢纽模型指定了哪个组件负责哪个部分。
JMS: 它是Java平台提供的统一API,使开发人员直接使用JMS API而不必担心底层消息框架。消息实现必须符合JMS规范才能被JMS API使用。