我对消息代理之间的区别有点困惑,例如RabbitMQ和面向消息的中间件。除了维基百科上的内容之外,我找不到太多信息。在搜索MOM时,我在AMQP上找到有关MOM协议的信息。这是什么意思?那妈妈是什么?我也读过RabbitMQ实现了AMPQ协议..为什么这会让RabbitMQ成为一个消息代理?消息代理和MOM是一回事吗?
希望有些人可以解开我的困惑。感谢
答案 0 :(得分:18)
概述 -
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只是其中之一。