AMQP和ZeroMQ之间的区别

27

最近开始涉足 AMQP(RabbitMQ、ActiveMQ)和 ZeroMQ 技术,对分布式系统/计算感兴趣。搜了很多谷歌和 StackOverflow ,没有找到两者之间的明确比较。

我了解到这两种技术并不真正可比,但想知道它们之间的区别。在我看来,ZeroMQ 更加去中心化(没有消息代理作为中间人处理消息/保证交付),因此更快,但不是一个完整的系统,而是一些程序化的处理方式,类似于 Actors 。

另一方面,AMQP 似乎是一个更完整的系统,具有中央消息代理确保可靠传递,但由于这个原因速度比 ZeroMQ 慢。然而,中央代理创建了单点故障。

也许可以用客户端/服务器与 P2P 的比喻来形容?

我的发现正确吗?此外,使用其中一种技术的优缺点或应用场景是什么?与 *MQ 相比,如何比较使用 Akka Actors ?

编辑 查了一些资料..ZeroMQ似乎是对AMQP的新挑战者,速度更快,唯一的问题可能是采用/实施?

6个回答

22

1
那个链接简直就是0MQ的宣传。 - KSK

15

AMQP是一种协议,ZeroMQ是一个消息库。

AMQP提供流量控制和可靠交付。它为消息定义了标准但可扩展的元数据(例如回复地址,生存时间以及任何应用程序定义的标头)。ZeroMQ只是提供消息分隔(即将字节流拆分为原子单元),并假设底层协议(例如TCP)的属性足够或者应用程序将在ZeroMQ之上构建额外的功能,如流量控制、可靠性或其他。

虽然早期版本的AMQP沿客户端/服务器线定义,因此需要代理,但对于AMQP 1.0而言不再是这样,其核心是对称的点对点协议。中介规则(如代理)是在其之上进行分层的。Alexis的链接比较代理和无代理,提供了有关中介可以提供的好处的良好描述。AMQP定义了不同组件之间的互操作规则 - 客户端、"智能客户端"、代理、桥接器、路由器等 - 使得可以通过选择有用的部分来组成系统。


零消息队列(ZeroMQ)提供的功能是否类似于Actor模型的并发/分布式计算? - adelbertc
我不会用那样的措辞来表达。Actor模型是一种与ZeroMQ提供的套接字接口不同的抽象。然而,Actor模型基于消息传递,因此您可以在ZeroMQ(或几乎任何其他消息传递技术)之上实现该模型。 - Gordon Sim
1
Gordon,“ZeroMQ仅提供消息分界(即将字节流分解为原子单元)”是非常不准确的。你从哪里得到这个想法的?这是一个恶搞:http://www.zeromq.org/topics:omq-is-just-sockets。 - Pieter Hintjens
17
那些不想点击链接的人,请注意这个笑话的结论:除了可移植性、消息框架、超快的异步I/O、对任何人关心的语言的支持、庞大的社区、零价格标签、令人惊叹的性能、内存溢出保护、大量内部一致性检查、像发布/订阅和请求/响应这样的模式、批处理以及对线程间传输以及TCP和组播的无缝支持之外,ZEROMQ其实就是套接字! - Pieter Hintjens
1
-1 是因为(正如其他答案和评论中提到的那样),这个回答关于0MQ是完全错误的。 - Marek
我通常支持使用zeromq,因为它使得套接字的操作变得更加容易,并且允许我们将重点放在业务逻辑上,而不是低级网络编程。随着越来越多的人开始使用它,我慢慢地开始认为所有的好处都是理所当然的,同时也开始思考与套接字相比是否存在功能性的缺陷,例如消息传递不能保证。 - liang

7
在ZeroMQ中根本没有消息队列,因此得名。它仅提供了一种在普通套接字上使用消息语义的方式。
AMQP是用于消息队列的标准协议,应该与处理所有消息发送和接收的消息代理一起使用。它具有许多功能,因为它通过代理管道传输所有消息流量。这听起来可能很慢,但在数据中心内使用时,主机到主机的延迟非常小,实际上相当快速。

2

1
“Broker-less”是一个误称,与像ActiveMQ、QPid、Kafka等消息代理相比,它只是用于简单的连线。它有用,并且可以应用于热点以减少网络跳数和延迟,当我们添加可靠性、存储转发功能和高可用性要求时,您可能需要一个分布式代理服务以及一个队列来共享数据,从而支持一种松耦合的拓扑结构 - 在时间上解耦。可以使用ZeroMQ实现这种拓扑结构和架构,您必须考虑您的使用情况并查看是否需要异步消息传递,如果需要,则需要考虑ZeroMQ在哪里适用。它在解决方案中扮演了重要角色,对TCP/IP和套接字编程的合理了解将帮助您欣赏所有其他内容,如ZeroMQ、AMQP等。

1
AMQP(高级消息队列协议)是一种标准的二进制传输层协议,使符合要求的客户端应用程序能够与符合要求的消息中间件代理进行通信。AMQP允许不同企业或企业内部的跨平台服务/系统轻松交换消息,无论消息代理供应商和平台如何。有许多代理已经实现了AMQP协议,例如RabbitMQ、Apache QPid、Apache Apollo等。
ZeroMQ是一个面向可伸缩分布式或并发应用程序的高性能异步消息库。它提供了一个消息队列,但与面向消息的中间件不同,ØMQ系统可以在没有专用消息代理的情况下运行。

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