31

对于消息代理(例如 RabbitMQ)和面向消息的中间件之间的区别,我有点困惑。除了维基百科上的内容外,我找不到太多信息。在搜索 MOM 时,我找到有关 AMQP 的信息,这些信息表明是 MOM 的协议。这是什么意思?那么妈妈是什么?我还读到 RabbitMQ 实现了 AMPQ 协议。那么为什么这会使 RabbitMQ 成为消息代理?消息代理和 MOM 是一回事吗?

希望有人能解开我的困惑。谢谢

4

3 回答 3

29

概述 -

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

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


如你所问:

在搜索 MOM 时,我找到有关 AMQP 的信息,这些信息表明是 MOM 的协议。这是什么意思?

MOM 是关于在(分布式)系统组件之间拥有消息传递中间件(中间层),而 AMQP 是用于可靠发送和接收消息的协议(规则集)。因此,MOM 实现(即 Rabbitmq)可能会使用 AMQP。

那么妈妈是什么?

Message-Oriented-Middleware - 是一种方法,一种分布式系统架构,即整个分布式系统的中间层,其中有很多内部通信(一个组件正在查询数据,然后需要将其发送到另一个组件,这将对数据进行一些处理),因此组件必须在它们之间共享信息/数据。简而言之,它是一种设计系统的方式,例如:根据我们需要开发一个分布式系统的总体要求,以及一些内部通信。MOM 架构/决策的最大优势是组件的解耦,即如果我们要更改数据查询组件,它不会对数据处理组件产生影响,因为它们通过 MOM 进行通信(例如

最后的 MOM 只是一个设计决策,我们使用中间件来粘合我们的系统(分布式)组件,中间件用于处理它们之间的通信,以消息的形式(即 JSON)。要实现面向消息的中间件,我们需要更多特定规则集,即消息将如何发布、使用、确认如何工作、消息的生命周期直到被使用、消息的持久性等. AMQP 基本上是这些规则集,即用于实现 MOM 的标准/协议,即使用 AMQP 的消息传递系统,意味着它受所述规则的限制。来自维基百科:

AMQP 要求消息传递提供者和客户端的行为达到不同供应商的实现可互操作的程度,就像 SMTP、HTTP、FTP 等创建可互操作的系统一样。

我还读到 RabbitMQ 实现了 AMPQ 协议。那么为什么这会使 RabbitMQ 成为消息代理?

是的,Rabbitmq 是一个消息代理(发布者 -> 交换 -> 队列 -> 消费者)。它是一个开源 AMQP 实现,即一个消息传递系统/代理,它仅限于 AMQP(AMQP 规则)——可以使用 Rabbitmq 作为中间件,因此可以使用 MOM。

AMQP - 只是一组规则,即消息将如何发布、保存(在队列中)、使用、传递确认等。

消息代理和 MOM 是一回事吗?

简单来说,是的。如果我们需要为我们的分布式系统进行 MOM 设计,我们可以简单地使用 Rabbitmq(一个消息代理;一个 AMQP 实现)作为中间件。

于 2016-05-03T09:00:45.747 回答
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)。

于 2012-11-04T10:59:33.537 回答
7

消息代理是一种(非常流行的)MOM。另一种 MOM 是无代理 MOM,例如 ZeroMQ。使用基于代理的 MOM,所有消息都转到一个中心位置:代理,然后从那里分发。Brokerless MOM 通常允许点对点消息传递(但也不排除中央服务器的选项)。

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

于 2012-11-04T09:52:04.257 回答