面向初学者 - 什么是RabbitMQ?

面向初学者的第一部分解释什么是RabbitMQ和消息队列--该指南还简要说明消息队列并定义重要概念。本指南将进一步阐述建立连接的步骤以及从队列发布/消费消息的基础。

RabbitMQ是一种消息队列软件,也称为消息代理或队列管理器。简单地说;它是定义队列的软件,应用程序连接到它以传输一条或多条消息。

消息可以包括任何类型的信息。例如,它可以包含应该在另一个应用程序(甚至可以在另一台服务器上)上启动的进程或任务的信息,也可以只是一条简单的文本消息。队列管理器软件存储消息,直到接收应用程序连接并从队列中取出消息,接收应用程序然后处理该消息。

RabbitMQ实例

消息代理充当各种服务(例如,本例中的web应用程序)的中间人。它们可以用于通过将通常会占用大量时间或资源的任务委派给没有其他工作的第三方来减少web应用程序服务器的负载和交付时间。

在本指南中,我们遵循一个场景,其中web应用程序允许用户将信息上传到网站。该网站将处理这些信息,生成PDF,并通过电子邮件将其发送给用户。在本例中,处理信息、生成PDF和发送电子邮件需要几秒钟的时间。这就是为什么要使用消息队列来执行任务的原因之一。

当用户在web界面中输入用户信息时,web应用程序将创建一个“PDF处理”消息,其中包括用户需要的所有重要信息,并将其放入RabbitMQ中定义的队列中。

消息队列的基本架构很简单——有一些称为生产者的客户端应用程序,它们创建消息并将消息传递给代理(消息队列)。其他应用程序(称为消费者)连接到队列并订阅要处理的消息。软件可以充当消息的生产者或消费者,或者既是消息的消费者又是消息的生产者。放置在队列中的消息将被存储,直到使用者检索到它们为止。

什么时候、为什么应该使用RabbitMQ?

消息队列允许web服务器快速响应请求,而不是被迫当场执行可能延迟响应时间的资源密集过程。当您想将消息分发给多个使用者或在工作人员之间平衡负载时,消息排队也很好。

消费者从队列中取出一条消息并开始处理PDF。与此同时,生产者正在排队等候新消息。使用者可以位于与生产者完全不同的服务器上,也可以位于同一服务器上。该请求可以用一种编程语言创建,并用另一种程序语言处理。关键是,这两个应用程序将仅通过它们相互发送的消息进行通信,这意味着发送方和接收方的耦合度较低。

1. 用户向web应用程序发送PDF创建请求。

2. web应用程序(生产者)向RabbitMQ发送一条消息,其中包括来自请求的数据,如姓名和电子邮件。

3. 交换接受来自生产者的消息,并将它们路由到正确的消息队列以创建PDF。

4. PDF处理工作者(使用者)收到任务消息并开始处理PDF。

EXCHANGES

消息不会直接发布到队列;相反,生产者向交换机发送消息。交换机负责在绑定和路由密钥的帮助下将消息路由到不同的队列。绑定是队列和交换之间的链接。

RabbitMQ中的消息流

1. 生产者向exchange发布消息。创建exchange时,必须指定类型。稍后将介绍此主题。

2. exchange接收消息,现在负责路由消息。exchange根据exchange类型考虑不同的消息属性,例如路由密钥。

3. 必须创建从exchange到队列的绑定。在这种情况下,有两个绑定到来自exchange的两个不同队列。exchange根据消息属性将消息路由到队列中。

4. 消息一直保留在队列中,直到由使用者处理为止

5. 消费者处理消息。

EXCHANGE类型

本教程的第2部分使用了直接交换。有关不同交换类型、绑定密钥、路由密钥以及应如何或何时使用它们的更深入了解,请参阅第4部分:RabbitMQ初学者-交换、路由密钥和绑定。

  • Direct:消息被路由到binding key【绑定密钥】与消息的routing key【路由密钥】完全匹配的队列。例如,如果队列使用binding key【绑定密钥】pdfprocess绑定到Exchange【交换机】,则使用routing key【路由密钥】pdfpprocess发布到交换机的消息将路由到该队列。
  • FanoutFanout交换将消息路由到与其绑定的所有队列。
  • Topic:主题交换在routing key【路由关键字】和绑定中指定的routing pattern【路由模式】之间进行通配符匹配。
  • Headers:标头交换使用message header【消息标头】属性进行路由。

RABBITMQ概念

在我们深入研究RabbitMQ之前,需要描述一些重要的概念。示例中使用了默认的虚拟主机、默认的用户和默认的权限,所以让我们回顾一下元素和概念:

Producer:发送消息的应用程序。

Consumer:接收消息的应用程序。

队列:存储消息的缓冲区。

消息:生产者通过RabbitMQ发送给消费者的信息。

Connection:应用程序和RabbitMQ代理之间的TCP连接。

Channel:连接中的虚拟连接。当发布或使用队列中的消息时,这一切都是通过通道完成的。

Exchange:接收来自生产者的消息,并根据交换类型定义的规则将它们推送到队列。若要接收消息,队列至少需要绑定到一个交换机。

绑定:绑定是队列和交换之间的链接。

Routing key:交换机用来决定如何将消息路由到队列的密钥。将路由密钥想象成邮件的地址。

AMQP:高级消息队列协议是RabbitMQ用于消息传递的协议。

用户:可以使用给定的用户名和密码连接到RabbitMQ。每个用户都可以被分配权限,例如在实例中读取、写入和配置权限的权限。还可以为用户分配特定虚拟主机的权限。

Vhost, virtual host:提供一种使用相同RabbitMQ实例隔离应用程序的方法。不同的用户可以对不同的vhost拥有不同的权限,并且可以创建队列和交换,因此它们只存在于一个vhost中。

在本系列文章的开头,我们有一个生产者(网站应用程序)和一个消费者(PDF处理应用程序)。如果PDF处理应用程序崩溃,或者同时收到许多PDF请求,消息将继续堆积在队列中,直到消费者再次启动。然后,它将逐一处理所有消息。

创建RabbitMQ实例

RabbitMQ启航

创建RabbitMQ实例后,可以立即跨语言、平台和操作系统发送消息。这种处理消息的方式将流程解耦,并创建一个高度可扩展的系统。现在,您可以通过打开管理界面来获得RabbitMQ服务器的概览。

管理界面-管理和监控

RabbitMQ提供了一个web UI,用于管理和监视您的RabbitMQ服务。通过管理界面,可以处理、创建、删除和列出队列。还可以监视队列长度、检查消息速率,或者更改和添加用户权限等等。

发布和订阅消息

默认情况下,RabbitMQ使用名为AMQP的协议。为了能够与RabbitMQ通信,您需要一个与Rabbit MQ相同协议的库,下载用于应用程序的编程语言的客户端库,客户端库是用于编写客户端应用程序的应用程序编程接口(API)。

设置连接和发布消息/消费消息时应遵循的步骤:

1. 设置/创建连接对象。需要指定用户名、密码、连接URL、端口等。调用启动方法时,将在应用程序和RabbitMQ之间建立TCP连接。

2. 在TCP连接中创建一个通道,然后连接接口可以用来打开一个发送和接收消息的通道。

3. 声明/创建队列。如果队列不存在,则声明队列将导致创建该队列。所有队列都需要声明,然后才能使用。

4. 设置交换机并将队列绑定到订阅者/使用者中的交换机。所有Exchange必须先声明,然后才能使用。Exchange接受来自生产者应用程序的消息,并将它们路由到消息队列。要将消息路由到队列,队列必须绑定到Exchange。

5. 在发布者中:将消息发布到Exchange

在订阅者/使用者中:使用队列中的消息。

6. 关闭通道和连接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值