在 5 分钟或更短时间内解释 RabbitMQ

今天我们将看到如何通过异步执行最繁重的处理来加快页面的加载时间,所有这些都非常简单地管理,这要归功于 RabbitMQ。

应用程序或网站的稳定性和速度无疑是用户最重要的因素之一。 谁在看到第一页之前从未离开过网站,因为它花了太长时间?

什么是 RabbitMQ

RabbitMQ 是一种开源、分布式和可扩展的消息传递代理,充当生产者和消费者之间高效通信的中介。

RabbitMQ 实现了应用层消息传递协议 AMQP,该协议专注于通过确认从代理到生产者以及从消费者到生产者的消息接收来传递具有交付保证的异步消息。

RabbitHQ 是如何工作的

RabbitMQ 以一种简化的方式定义了队列,这些队列将存储生产者发送的消息,直到消费应用程序获取消息并对其进行处理。 它允许我们设计和实现分布式系统,其中一个系统被划分为独立的模块,这些模块通过消息相互通信。

像所有通信一样,我们需要生产者、消息和接收者。 蛋糕中间是 RabbitMQ,这将是消息等待接收者的地方。

让我们通过了解代表消息交换的交换类型来更好地理解它是如何工作的。

交换类型

通过交换,每当我们通过 RabbitMQ 发送消息时,我们不会直接将其发送到队列; 为了让其他系统读取它,我们将它发送到一个交换器,它负责将消息转发到不同的队列。

图片来源:CloudAQMP

交换的类型有直接、扇出、主题和读者。

直接交换

假设生产者需要向三个消费者发出购买确认消息。 也就是说,系统需要与其他三个不同的系统进行通信才能进行购买。

由于 RabbitMQ 将消息分别发送到每个队列,因此有动力让这些其他系统直接接收消息。

通常情况下,exchange 会将消息转发到队列中,但我们往往不希望我们的消息被发送到所有的队列中。 因此,我们可以应用几个条件来进行交换工作。

因此,您可以只将消息发送给一个消费者; 而不是发送给所有人。

Binding Key:要将队列连接到交换器,您需要创建一个绑定,即队列和交换器之间的关系,就像连接器一样。

Routing Key:在这个bind中,我们还可以创建一个叫做routing key的元素,换句话说,就是将我们的消息转发到特定队列的key。

例如,如果您有一个路由键 X、一个路由键 Y 和一个路由键 Z,带有路由键 Y 的消息将通过队列 Y 并直接传递给您定义的接收消息的消费者。

这样,我们可以有多个队列连接到一个交换器,但同时,它们也可以使用路由键与交换器建立不同的关系。

扇出交换

当消息被发送到交换器时,它被发送到所有连接到它的队列。 因此,如果您有 10 个队列连接到一个扇出交换器,则所有队列都将收到发送的消息。

  为什么 Minka Aire 遥控器不工作?

话题交流

它是最灵活的交换之一,允许我们根据主题发送消息。 并且根据您命名路由键的方式,可以创建规则模式和系统之间的关系。

例如:路由键(x.*); 路由键(*.z); 路由键 (*.y.*)。

RabbitMQ 中的 AQMP 是什么

AMQP(高级消息队列协议)是一种开放的消息传递协议,用于定义多个应用程序之间的消息传输。 它类似于 HTTP 和 TCP 协议,因为它是一种有线级协议,只是它允许异步传输。

RabbitMQ 选择实现 AMQP 有几个原因。 首先是这个协议被描述为中间件的标准,不像 JMS,它定义了一个 API。

一个国际联盟,包括像 Red Hat、Cisco Systems 和 Microsoft 这样的大公司,编写了这个 AMQP 规范。 第二个是该协议的互操作性,它允许任何实现 AMQP 的应用程序与 AMQP 代理进行通信。

AMQP 不是 RabbitMQ 使用的唯一协议。 下图代表了 RabbitMQ 实现和/或支持的所有协议、语言和 API。

RabbitMQ 的最佳特性

除了允许通过异步消息和来自不同位置的消息集成不同的应用程序之外,RabbitMQ 还为我们提供了其他功能,这些功能使其在消息代理世界中非常流行:

可靠的存储

RabbitMQ 合并了几个允许它保证消息传递的特性。 其中,它提供了当没有消费者可以接收到消息时的存储。 它允许消费者接受消息的传递以确保它已被成功处理。

如果处理失败,RabbitMQ 允许消息重新排队以供不同的消费者实例使用,或者由最初失败的同一个消费者在恢复时再次处理。

RabbitMQ 还保证了消息的传递顺序; 也就是说,它们的消费顺序与它们到达 RabbitMQ 队列的顺序相同。

创建集群

尽管 RabbitMQ 通过每秒处理数千条消息来提供出色的性能,但有时它需要能够在不影响应用程序性能的情况下处理更多的消息。

为此,RabbitMQ 允许创建集群以水平扩展解决方案,这对生产者和消费者都是透明的。

高可用队列

在 RabbitMQ 中,队列可以复制到集群中的多个节点,确保在节点故障或停机时,代理可以继续接收来自生产者的消息并将它们传递给适当的消费者。

灵活的路由

在 RabbitMQ 中,可以定义灵活的路由规则,甚至遵循某种模式,通过绑定在交换器和队列之间路由消息。

多协议支持

RabbitMQ 除了支持 AMQP 协议外,还通过插件支持 STOMP、MQTT 和 HTTP。 它还为每个代理的组件合并了身份验证和访问控制机制。

RabbitMQ 的实际用例

RabbitMQ 最重要的用例是使应用程序之间的异步性保证成为可能,减少应用程序之间的耦合,分发警报以及在后台控制作业队列。

然而,RabbitMQ 的实际用例是在电子商务中,其中 t 用于操纵、处理并将您的销售订单转发到其他部门的系统,例如分销和开具发票。

  选择 Adob​​e Acrobat 替代方案时的 6 个注意事项

处理订单时,您可以将销售消息转发到配送中心和发票区域。 在这个方案中,一切都是水平工作的,遵循发送消息的异步模式,但通常可以将一个动作发送到多个队列。

按照前面的示例,当客户进行购买并且需要准备产品以进行分发、运输和开具发票时,此功能非常有用。

由于这些扇区中的每一个都是一个不同的系统,RabbitMQ 的目标是将所有这些消息转发到相应的系统。

兔子 MQ 替代品:

RabbitMQ 比它看起来简单得多,并且有几种替代方法,包括:

#1。 IronMQ

IronMQ 是超快的消息队列软件。 它的可用性高,设计耐用,最好是一次性交付。 IronMQ 是现代应用程序架构最强大的云原生解决方案。

它支持推送队列、拉取队列和长轮询,使轮询请求保持更长时间。 此外,它可以使用多个高可用性数据中心,这有助于扩展性。

您可以在云端、共享或专用硬件或本地进行部署。 它还具有一系列带有易于阅读文档的客户端库。

#2。 阿帕奇卡夫卡

Kafka 是一个在分布式事件流中具有强大影响力的平台。 Kafka 的核心被设计为一个可复制的、分布式的、持久的提交日志。

它最大的可用性是为事件驱动的微服务或大规模流处理应用程序提供动力,在集群内自动异步复制事件以实现容错和高可用性。

#3。 阿帕奇ActiveMQ

ActiveMQ 是一个基于 Java 的多协议消息代理。 有了它,我们就可以在应用层集成使用AMQP消息队列协议的应用。

它实现了多种集成协议,例如 JMS(本机 Java)和 Stomp(可由 PHP 应用程序使用)等。

此外,Amazon 拥有名为 Amazon MQ 的“托管”版本,这使得使用该服务变得更加容易。

最后的话

传统上,消息代理一直是组织架构中的重要组成部分。 尽管如此,随着通过不同渠道进入公司系统的用户越来越多,需要能够以低成本横向扩展的产品。 允许每秒处理大量消息。

这就是新一代代理(如 RabbitMQ)在现代应用程序中变得越来越重要的地方,这些应用程序寻求为我们的客户提供高水平的可用性、可靠性、互操作性和性能。

您还可以为您的应用程序探索一些可靠的 RabbitMQ 托管平台。