介绍
把事情推迟一段时间而不是立即去做可以被认为是懒惰的。 事实上,大多数时候可能是这样。 但是,有时这样做绝对是正确的。 有时,需要将一项耗时的工作推迟一段时间; 它需要排队等待将来执行,以便处理更重要的事情。 为此,您需要 代理 :接受消息的人(例如 来自不同发件人(即 Web 应用程序),将它们排队,并将它们分发给相关方(即 工人)来使用它们——所有这些都是异步和按需的。
在这篇 DigitalOcean 文章中,我们旨在向您介绍 RabbitMQ 项目:一个开源消息代理应用程序堆栈,它实现了高级消息队列协议 (AMQP) 来处理我们上面解释的整个场景.
消息传递、消息代理和队列
消息传递是一种在进程、应用程序和服务器(虚拟和物理)之间交换某些数据的方式。 这些交换的消息有助于满足某些工程需求,可以包含从纯文本消息到用于满足不同需求的二进制数据块的任何内容。 为此,需要一个由第三方程序(中间件)管理的接口……欢迎使用 Message Brokers。
消息代理通常是应用程序堆栈,其中包含覆盖交换设置每个阶段的专用部分。 从接受消息到排队并将其传递给请求方,经纪人处理的职责通常会更加繁琐. 它们只是通过处理技术上构成无限缓冲区的队列来工作,以放置消息并稍后弹出并传递它们以自动或通过轮询进行处理。
为什么要使用它们?
这些消息代理解决方案充当各种服务的中间人(例如 您的网络应用程序)。 它们可用于大大减少 Web 应用程序服务器的负载和交付时间,因为通常需要相当长的时间来处理的任务可以委派给唯一的工作是执行它们的第三方(例如 工人)。 当需要更“有保证”的持久性将信息从一个地方传递到另一个地方时,它们也会派上用场。
什么时候使用它们?
总而言之,所解释的核心功能扩展到涵盖多个领域,包括但不限于:
- 允许 Web 服务器快速响应请求,而不是被迫在现场执行大量资源的程序
- 将消息分发给多个收件人以供消费(例如 加工)
- 让线下聚会(即 断开连接的用户)稍后获取数据,而不是让它永久丢失
- 向后端系统引入完全异步功能
- 对任务进行排序和优先级
- 平衡工作人员之间的负载
- 大大提高应用程序的可靠性和正常运行时间
- 以及更多
兔MQ
RabbitMQ 是市场上比较流行的消息代理解决方案之一,提供开源许可证(Mozilla Public License v1.1)作为高级消息队列协议的实现。 使用Erlang语言开发,其实比较容易上手。 它于 2007 年初首次发布,此后一直在积极开发,其最新版本是 版本 3.2.2(2013 年 12 月)。
它是如何工作的?
RabbitMQ 通过提供一个接口来工作,通过一个将数据分发到相关列表(消息队列)的交换(代理)将消息发送者(发布者)与接收者(消费者)连接起来。
APPLICATION EXCHANGE TASK LIST WORKER [DATA] -------> [DATA] ---> [D]+[D][D][D] ---> [DATA] Publisher EXCHANGE Queue Consumer
它与其他人有何不同?
RabbitMQ 与其他一些解决方案不同,它是一个成熟的应用程序堆栈(即 消息代理)。 它为您提供了您需要使用的所有工具,而不是像一个框架一样让您实现自己的。 非常受欢迎,使用 RabbitMQ 并在线找到问题的答案非常容易。
高级消息队列协议 (AMQP) 简介
AMQP 是一种广泛接受的开源标准,用于将消息从源分发和传输到目标。 作为一种协议和标准,它为各种应用程序和消息代理中间件的互操作奠定了共同基础,而不会遇到由单独设置的设计决策引起的问题。
安装 RabbitMQ
RabbitMQ 软件包与基于 CentOS / RHEL 和 Ubuntu / Debian 的系统一起分发。 但是,它们 - 与大多数应用程序一样 - 已过时。 因此,在您的系统上获取 RabbitMQ 的推荐方法是在线下载软件包并手动安装。
注意: 由于各种原因,我们将在全新创建的 VPS 上执行安装并执行此处列出的操作。 如果您正在积极为客户服务并且可能已经修改了您的系统,为了不破坏任何工作并且不遇到问题,强烈建议您在新系统上尝试以下说明。
在基于 CentOS 6 / RHEL 的系统上安装
在安装 RabbitMQ 之前,我们需要获取它的主要依赖,例如 Erlang。 但是,首先我们应该更新我们的系统及其默认应用程序。
运行以下命令来更新我们的 droplet:
yum -y update
让我们使用以下命令在我们的系统上获取 Erlang:
# Add and enable relevant application repositories: # Note: We are also enabling third party remi package repositories. wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm # Finally, download and install Erlang: yum install -y erlang
一旦我们有了 Erlang,我们就可以继续安装 RabbitMQ:
# Download the latest RabbitMQ package using wget: wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.2.2/rabbitmq-server-3.2.2-1.noarch.rpm # Add the necessary keys for verification: rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc # Install the .RPM package using YUM: yum install rabbitmq-server-3.2.2-1.noarch.rpm
在基于 Ubuntu 13 / Debian 7 的系统上安装
由于我们希望拥有更新的版本,在 Ubuntu 和 Debian 上下载和安装 RabbitMQ 的过程将与 CentOS 类似。
让我们从更新系统的默认应用程序工具集开始:
apt-get update apt-get -y upgrade
启用 RabbitMQ 应用程序存储库:
echo "deb http://www.rabbitmq.com/debian/ testing main" >> /etc/apt/sources.list
为包添加验证密钥:
curl http://www.rabbitmq.com/rabbitmq-signing-key-public.asc | sudo apt-key add -
使用我们从上面添加的新内容更新源:
apt-get update
最后,下载并安装 RabbitMQ:
sudo apt-get install rabbitmq-server
为了在启动时管理最大连接数,请使用 nano
打开并编辑以下配置文件:
sudo nano /etc/default/rabbitmq-server
取消注释 limit
行(即 在保存之前删除 #
),然后按 CTRL+X 然后按 Y 退出。
管理 RabbitMQ
正如我们之前提到的,RabbitMQ 上手非常简单。 使用以下针对您的系统的说明,您可以快速管理其进程并使其在系统启动时运行(即 引导)。
启用管理控制台
RabbitMQ 管理控制台 是可用的插件之一,可让您通过基于 Web 的图形用户界面 (GUI) 监控 [RabbitMQ] 服务器进程。
使用此控制台,您可以:
- 管理交换、队列、绑定、用户
- 监控队列、消息速率、连接
- 发送和接收消息
- 监控 Erlang 进程、内存使用情况
- 以及更多
要启用 RabbitMQ 管理控制台,请运行以下命令:
sudo rabbitmq-plugins enable rabbitmq_management
启用控制台后,可以使用您喜欢的 Web 浏览器访问:http://[your droplet's IP]:15672/
。
默认用户名和密码均设置为“guest”以进行登录。
注意:如果您在运行服务后启用此控制台,您需要重新启动它才能使更改生效。 请参阅下面的相关管理部分以了解您的操作系统是否能够执行此操作。
在基于 CentOS / RHEL 的系统上管理
安装应用程序后,RabbitMQ 默认未设置为在系统启动时启动。
要让 RabbitMQ 默认作为守护进程启动,请运行以下命令:
chkconfig rabbitmq-server on
要启动、停止、重新启动和检查应用程序状态,请使用以下命令:
# To start the service: /sbin/service rabbitmq-server start # To stop the service: /sbin/service rabbitmq-server stop # To restart the service: /sbin/service rabbitmq-server restart # To check the status: /sbin/service rabbitmq-server status
在基于 Ubuntu / Debian 的系统上管理
要在 Ubuntu 和 Debian 上启动、停止、重新启动和检查应用程序状态,请使用以下命令:
# To start the service: service rabbitmq-server start # To stop the service: service rabbitmq-server stop # To restart the service: service rabbitmq-server restart # To check the status: service rabbitmq-server status
就是这样! 您现在有自己的消息队列在您的虚拟服务器上工作。
配置 RabbitMQ
RabbitMQ 默认使用其标准配置运行。 一般来说,只要一切顺利,它就不需要太多的回火来满足大多数需求。
要了解如何根据自定义需求对其进行配置,请查看 Configuration 的文档。