消息代理与消息导向中间件(MOM)的区别

34

我有些困惑于消息代理(例如RabbitMQ)和面向消息的中间件之间的区别。除了维基百科上的信息外,我找不到更多资料。当搜索MOM时,我发现了关于AMQP的信息,它是MOM的协议...这是什么意思?那么MOM又是什么呢?我还读到RabbitMQ实现了AMPQ协议...那为什么RabbitMQ可以成为消息代理?消息代理和MOM是相同的东西吗?

希望有人能解答我的疑惑,谢谢

3个回答

33

概述 -

  • 协议 - 一组规则。
  • AMQP - AMQP是一个开放的互联网协议,用于可靠地发送和接收消息。
  • MOM(面向消息的中间件)- 是一种分布式系统的方法,一种中间层,用于整个分布式系统的内部通信(一个组件正在查询数据,然后需要将其发送到另一个组件,该组件将对数据进行处理),因此各个组件必须共享信息/数据。
  • 消息代理 - 在MOM中,任何处理消息(发送和接收)的系统,或更准确地说,将消息路由到特定的消费者/接收方的系统。消息代理通常建立在MOM之上。MOM提供应用程序之间的基本通信,以及诸如消息持久性和保证交付等功能。 "消息代理是面向消息中间件的构建块"。
  • Rabbitmq - 消息代理;MOM实现;AMQP的开源实现;根据维基百科:

    RabbitMQ是一个开源的消息代理软件(有时称为面向消息的中间件),它实现了高级消息队列协议(AMQP)。


就您的问题:

当我搜索MOM时,我发现关于AMQP的信息表明它是MOM的协议..这是什么意思?

MOM是关于在(分布式)系统组件之间具有消息中间件(中间层),而AMQP是可靠地发送和接收消息的协议(一组规则)。因此,MOM实现(例如Rabbitmq)可以使用AMQP。

MOM是什么?

面向消息的中间件 - 是一种分布式系统的方法,一种中间层,用于整个分布式系统的内部通信(一个组件正在查询数据,然后需要将其发送到另一个组件,该组件将对数据进行处理),因此各个组件必须共享信息/数据。简而言之,这是一种设计系统的方法,例如:根据整体需求,我们需要开发一个分布式系统,并进行一些内部通信。MOM架构/决策的最大优点是组件解耦,即如果我们要更改数据查询组件,则不会影响数据处理组件,因为它们通过MOM(例如Rabbitmq集群)进行通信——数据处理组件以消息形式获取数据,然后解析和处理。

最终,MOM只是一种设计决策,我们使用中间件来粘合我们的系统(分布式)组件,使用消息(即JSON)来处理它们之间的通信。要实现面向消息的中间件,我们需要更多内容——一组特定的规则,即消息将如何发布、消费、确认工作方式、消息的生存期直到被消费、消息的持久性等。AMQP基本上就是这些规则,即用于实现MOM的标准/协议,意味着它遵守所述规则。从维基百科:
AMQP强制执行消息提供程序和客户端的行为,以至于来自不同供应商的实现可以互操作,就像SMTP、HTTP、FTP等已经创建互操作系统一样。
我还阅读过RabbitMQ实现了AMPQ协议,那么为什么RabbitMQ成为了消息代理?
是的,Rabbitmq是一种消息代理(发布者->交换机->队列->消费者)。它是一个开源的AMQP实现,即符合AMQP(AMQP规则)-人们可以使用Rabbitmq作为中间件,因此是MOM。
AMQP只是一组规则,即如何发布消息、保存(在队列中)、消费、交付确认等。
消息代理和MOM是否相同?
简单来说,是的。如果我们需要按照MOM设计分布式系统,我们可以简单地使用Rabbitmq(一种消息代理;AMQP实现)作为中间件。

太棒了的回答!! - Timur Gilauri

12

"MOM" 通常指可以从一个用户空间应用程序传递“消息”的任何技术。与流相比,消息通常被理解为离散的信息片段。

MOM产品曾经非常庞大和复杂:CORBA、JMS、TIBCO、WebsphereMQ等等,并试图做更多的事情而不仅仅是传递消息。

代理是特定的路由和排队模式,我们通常在MOM中使用术语“代理”(与HTTP、电子邮件、XMPP等进行比较)。路由意味着一个消息发送到一个对等方、多个对等方中的一个、多个对等方中的所有对等方等。排队意味着消息被保存在内存或磁盘中,直到它们可以被传递(在某些情况下,需要确认)。

AMQP曾经专门针对这些代理模式进行规定,因此应用程序可以依赖于任何兼容AMQP的代理的一致行为(因此,RabbitMQ和OpenAMQ对客户端应用程序看起来非常相似,就像两个HTTP或两个XMPP服务器会看起来一样)。但是,AMQP/1.0只规定了节点之间的连接,因此您没有行为保证。这使得企业更容易实现AMQP/1.0,但无法提供互操作性。

ZeroMQ 是一种面向消息的中间件,类似于 AMQP/1.0,它定义了组件之间的连接而不是中央代理的行为。但是,使用 0MQ 编写 MOM 代理相对容易,我们已经完成了一些这样的代理(如 Majordomo)。


7

消息代理是一种(相当流行的)MOM类型。另一种MOM类型是无代理MOM,例如ZeroMQ。使用基于代理的MOM,所有消息都会发送到一个中心位置:代理,并从那里进行分发。无代理MOM通常允许点对点通信(但也不排除使用中央服务器的选择)。

AMQP是基于代理的MOM协议定义(至少在1.0之前的所有版本中,它漂移成更通用的MOM),并且有几个不同的消息代理实现该协议,RabbitMQ只是其中之一。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接