消息代理与MOM(面向消息的中间件)

时间:2012-11-02 19:58:39

标签: rabbitmq message-queue amqp messagebroker mom

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

希望有些人可以解开我的困惑。感谢

3 个答案:

答案 0 :(得分:18)

概述 -

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

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

正如你问的那样:

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

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

那么MOM是什么?

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

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

  

AMQP要求消息传递提供者和客户端的行为   来自不同供应商的实施是可互操作的程度,   以与SMTP,HTTP,FTP等相同的方式创建了可互操作的   系统

我也读过RabbitMQ实现了AMPQ协议..为什么这会让RabbitMQ成为一个消息代理呢?

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

AMQP - 只是一组规则,即消息将被发布,保存(排队),消费,交付确认等。

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

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

答案 1 :(得分:11)

“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)。

答案 2 :(得分:6)

消息代理是一种(非常受欢迎的)MOM。另一种MOM将是无代理的MOM,如ZeroMQ。使用基于代理的MOM,所有消息都会转到一个中心位置:代理,并从那里分发。 Broker less MOM通常允许对等消息传递(但也不排除中央服务器的选项)。

AMQP是基于代理的MOM协议定义(至少是1.0之前的所有版本,它们会进入更一般的MOM),并且有几个不同的Message代理实现该协议,RabbitMQ只是其中之一。