为啥我们需要使用rabbitmq

Posted

技术标签:

【中文标题】为啥我们需要使用rabbitmq【英文标题】:Why do we need to use rabbitmq为什么我们需要使用rabbitmq 【发布时间】:2011-07-05 04:41:53 【问题描述】:

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

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

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

【问题讨论】:

我认为这类问题不应该像重复或垃圾邮件问题那样被否决。如果发帖人混淆了两种技术的用途,那么我们应该解释一下他的误解,可能还有很多其他人有同样的问题。 我是 Twisted 的长期用户,昨天开始使用 RabbitMQ,我的第一反应是:“我们应该使用 Twisted 创建一个 AMQP 服务器,这将非常适合!”。 这就是我的意思....一切都可以用twisted 来完成,那么为什么要使用rabbitmq。总之谢谢你 【参考方案1】:

让我告诉你一些使用 MOM(面向消息的中间件)可能是最佳选择的原因。

解耦:

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

灵活性:

使用 AMQP 协议将两个完全不同的应用程序连接在一起实际上非常容易。这些应用程序将在 MOM 的“翻译器”的帮助下相互通信。

可扩展性:

通过使用 MOM,我们可以水平扩展系统。一个消息生产者可以向无限数量的消息消费者传输任务、命令或消息以进行处理和扩展该系统,我们需要做的只是创建新的消息消费者。假设我们每秒获得 1000 张图片,我们必须调整它们的大小。用传统方法解决这个问题可能会让人头疼。使用 MOM,我们可以将图像传输给消息消费者,它们可以异步完成工作并确保数据完整性。

它们也是使用 MOM 的其他好处,但我认为这 3 个是最重要的。

【讨论】:

【参考方案2】:

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

【讨论】:

没有真正回答这个问题。【参考方案3】:

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

RabbitMQ 是一个 AMQP 代理,即在您的应用程序之外运行的服务,可能在单独的服务器集群上。 AMQP 只是用于与 RabbitMQ 等消息队列代理进行通信的协议。你可以从 RabbitMQ 得到很多东西。您可以在保证交付的情况下持续发送消息,这样即使您的应用程序崩溃,即使 RabbitMQ 代理最终重新启动,它们也会到达。如果您在同一个队列中有多个消费者,您将获得消息消费者之间的负载平衡。只要您对消息正文使用合理开放的序列化格式,您就可以获得与其他语言的应用程序的互操作性。 AMQP 允许您将单一应用程序分解为许多松散耦合的部分,这些部分可以在不同的服务器上运行。这对于应用程序的长期维护来说是一个巨大的胜利。

【讨论】:

【参考方案4】:

RabbitMQ 不仅仅是消息传递......它是一个能够互连应用程序的通用平台。使用 RabbitMQ,Java 应用程序可以与 Linux 服务器和/或 .NET 应用程序、Ruby 和 rails + 几乎任何在企业 Web 开发中找到位置的东西对话。最重要的是它实现了 AMQP 提出的“即发即弃”模型。它只是 JMS 或 ESB 的完美替代品,特别是如果您正在处理跨平台架构,并保证可靠性。甚至还有一个称为 RPC(远程过程调用)的特殊功能,它增加了分布式架构中的开发便利性。

除此之外,在全球金融服务(如证券交易所或股票市场)中,需要大量可靠和高效的路由(假设您不知道订阅您服务的实际人数,但希望为了确保这样做的人收到您的 ping,无论他们是此时连接还是稍后连接),RabbitMQ 规则,因为它基于 ERLANG 和开放电信平台,可确保高性能同时使用最少的资源。有关 RabbitMQ 的最方便介绍,请参阅 rabbitmq.com/getstarted.html 以了解您的原生开发语言。

【讨论】:

【参考方案5】:

RabbitMQ 是AMQP 的一个实现,它为面向消息的中间件定义了一个可互操作的协议。因此,它定义了可以在任何平台上实现的消息创建、发布、路由和消费的语义。

从概念上讲,它可以被视为像 Twisted 这样的网络引擎的专业化,但基于行业公认的标准。

这是 Ross Mason 的一篇博客,讨论了与 AMQP 互操作的发布-订阅的兴趣:http://blogs.mulesoft.org/inter-operable-publishsubscribe-with-amqp/

【讨论】:

【参考方案6】:

我使用 RabbitMQ 作为Celery 的消息代理。

另外,我曾与 Twisted 合作过。它是不同的

有关 AMQP 的更多信息,请参见此处:http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol

【讨论】:

【参考方案7】:

RabbitMQ 使用 AMQP 等消息队列技术,这有助于保持事情的清洁和无延迟。

使用 RabbitMQ 的最佳方案是对数据进行后台处理,这可能需要更多时间来处理,并且无法通过 HTTP 提供服务。例如,如果您想从 Web 应用程序下载报告。生成报告需要大约 15-20 分钟的时间来处理和下载。那么在这种情况下,您应该将下载请求推送到 RabbitMQ 队列,然后您应该期望该报告通过电子邮件或通知发送给您。

要确切了解 RabbitMQ 的工作原理或它如何解决此类用例,您应该观看此 YouTube 视频 - https://youtu.be/vvxvlF6CJkg 和 https://youtu.be/0dXwJa7veI8

【讨论】:

以上是关于为啥我们需要使用rabbitmq的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ学习初识RabbitMQRabbitMQ的安装

Springboot 整合 RabbitMQrabbitmq介绍:安装,下载,创建队列交换机,5种工作模式

RabbitMQRabbitMQ和Erlang下载与安装步骤—2023超详细最新版

rabbitmq简介

为啥我们需要使用 flatMap?

为啥我们需要使用rabbitmq