我有些困惑于消息代理(例如RabbitMQ)和面向消息的中间件之间的区别。除了维基百科上的信息外,我找不到更多资料。当搜索MOM时,我发现了关于AMQP的信息,它是MOM的协议...这是什么意思?那么MOM又是什么呢?我还读到RabbitMQ实现了AMPQ协议...那为什么RabbitMQ可以成为消息代理?消息代理和MOM是相同的东西吗?
希望有人能解答我的疑惑,谢谢
我有些困惑于消息代理(例如RabbitMQ)和面向消息的中间件之间的区别。除了维基百科上的信息外,我找不到更多资料。当搜索MOM时,我发现了关于AMQP的信息,它是MOM的协议...这是什么意思?那么MOM又是什么呢?我还读到RabbitMQ实现了AMPQ协议...那为什么RabbitMQ可以成为消息代理?消息代理和MOM是相同的东西吗?
希望有人能解答我的疑惑,谢谢
概述 -
RabbitMQ是一个开源的消息代理软件(有时称为面向消息的中间件),它实现了高级消息队列协议(AMQP)。
就您的问题:
当我搜索MOM时,我发现关于AMQP的信息表明它是MOM的协议..这是什么意思?
MOM是关于在(分布式)系统组件之间具有消息中间件(中间层),而AMQP是可靠地发送和接收消息的协议(一组规则)。因此,MOM实现(例如Rabbitmq)可以使用AMQP。
MOM是什么?
面向消息的中间件 - 是一种分布式系统的方法,一种中间层,用于整个分布式系统的内部通信(一个组件正在查询数据,然后需要将其发送到另一个组件,该组件将对数据进行处理),因此各个组件必须共享信息/数据。简而言之,这是一种设计系统的方法,例如:根据整体需求,我们需要开发一个分布式系统,并进行一些内部通信。MOM架构/决策的最大优点是组件解耦,即如果我们要更改数据查询组件,则不会影响数据处理组件,因为它们通过MOM(例如Rabbitmq集群)进行通信——数据处理组件以消息形式获取数据,然后解析和处理。
"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)。
消息代理是一种(相当流行的)MOM类型。另一种MOM类型是无代理MOM,例如ZeroMQ。使用基于代理的MOM,所有消息都会发送到一个中心位置:代理,并从那里进行分发。无代理MOM通常允许点对点通信(但也不排除使用中央服务器的选择)。
AMQP是基于代理的MOM协议定义(至少在1.0之前的所有版本中,它漂移成更通用的MOM),并且有几个不同的消息代理实现该协议,RabbitMQ只是其中之一。