为什么我们需要使用RabbitMQ

73

当我们有一个更强大的Python网络框架Twisted时,为什么我们需要RabbitMQ?我试图理解使用RabbitMQ的原因。

你能否提供一个使用RabbitMQ的场景或示例呢?

此外,我在哪里可以找到有关如何使用RabbitMQ的教程?


61
我认为这种问题不应该像重复或垃圾问题一样被踩。如果发布者混淆了两个技术的目的,我们应该解释他的误解,因为可能有很多其他人也遇到同样的问题。 - Fernando Diaz Garrido
我是Twisted的长期用户,昨天开始使用RabbitMQ,我的第一反应是:“我们应该使用Twisted来创建一个AMQP服务器,这将非常适合!” - Etienne
这就是我的意思...一切都可以用Twisted完成,那为什么要使用RabbitMQ呢?不管怎样,谢谢。 - fear_matrix
7个回答

40

让我告诉您一些使用MOM(消息导向中间件)的最佳选择原因:

解耦:

它可以将应用程序的核心组件解耦/分离。这里不需要提及所有解耦架构的好处。我只想指出这是编写高质量和可维护软件的主要要求之一。

灵活性:

通过使用AMQP协议,连接两个完全不同的用不同语言编写的应用程序非常容易,这些应用程序将通过MOM“翻译器”相互交流。

可伸缩性:

通过使用MOM,我们可以水平扩展系统。一个消息生产者可以传输任务、命令或消息给无限数量的消息消费者进行处理,而对于扩展该系统,我们只需要创建新的消息消费者。假设我们每秒收到1000张图片并且必须调整其大小,使用传统方法解决此问题可能会很麻烦。通过MOM,我们可以将图像传输到消息消费者,他们可以异步地完成工作,并确保数据完整性。

还有其他使用MOM的好处,但在我看来,这3个是最重要的。


14

Twisted不是队列实现。除此之外,RabbitMQ提供了企业级别的排队功能并实现了AMQP协议,在企业世界中经常需要使用。


6
回答并没有实际回答问题。 - mateeyow

13

Twisted是一个网络库,实现了多种网络协议,并允许你创建自己的协议。其中之一可以使用Twisted的协议是AMQP https://launchpad.net/txamqp

RabbitMQ是一个AMQP代理,即在应用程序之外运行的服务,可能在单独的服务器群集上运行。AMQP仅是与消息队列代理(如RabbitMQ)通信所使用的协议。通过RabbitMQ,您可以获得很多好处。您可以发送具有保证传递的持久化消息,即使您的应用程序崩溃,甚至如果RabbitMQ代理重新启动也能抵达。如果在相同队列上有多个消费者,则可以获得消息消费者之间的负载平衡。只要为消息主体使用合理开放的序列化格式,您就可以与其他语言的应用程序进行互操作。AMQP允许将单片应用程序分解为许多松散耦合的部分,这对于长期维护应用程序是一个重大优势。


6
RabbitMQ不仅仅是一个消息传递的工具,它还是一个通用平台,可以连接各种应用程序。使用RabbitMQ,Java应用程序可以与Linux服务器和.NET应用程序交互,也可以与Ruby&Rails以及几乎任何在企业Web开发中找到位置的东西交互。最重要的是,它实现了AMQP提出的“发送并忘记”模型。如果您正在处理跨平台架构并且需要可靠性保证,它只是JMS或ESB的完美替代品。甚至有一个称为RPC(远程过程调用)的特殊功能,可增加分布式架构开发的便捷性。
除此之外,在像股票交易或股票市场这样需要大量可靠和高效路由的金融服务领域(假设您不知道订阅您服务的人数,但希望确保无论他们是否当前在线或稍后在线,谁都能收到您的ping),RabbitMQ是首选,因为它基于ERLANG和Open-telecom平台,保证了高性能,同时使用最少的资源。要方便地介绍RabbitMQ,请查看rabbitmq.com/getstarted.html以获取您的本地开发语言。

4
RabbitMQ是AMQP的一种实现,它定义了一个可互操作的面向消息中间件的协议。因此,它定义了可以在任何平台上实现的消息创建、发布、路由和消费的语义。
从概念上讲,它可以被认为是像Twisted这样的网络引擎的专业化版本,但基于一个行业公认的标准。
这里有一篇来自Ross Mason的博客,讨论了使用AMQP进行互操作性发布-订阅的兴趣:http://blogs.mulesoft.org/inter-operable-publishsubscribe-with-amqp/

2

0

RabbitMQ使用像AMQP这样的消息队列技术,有助于保持干净和低延迟。

而使用RabbitMQ的最佳场景是用于后台处理需要更长时间才能处理且无法通过HTTP提供服务的数据。例如,如果您想从Web应用程序中下载报告。并且该报告生成需要15-20分钟才能处理完毕并下载。那么在这种情况下,您应该将下载请求推送到RabbitMQ队列,然后您应该期望通过电子邮件或通知向您交付该报告。

要了解RabbitMQ的工作原理或如何解决此类用例,您可以查看这个YouTube视频 - https://youtu.be/vvxvlF6CJkghttps://youtu.be/0dXwJa7veI8


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