介绍
把东西放一会儿,而不是立即做它们可以被认为是懒惰的。 事实上,大多数时候它可能是。 然而,有时候它绝对是正确的事情。 偶尔,人们需要延迟一段耗时的工作一段时间; 它需要排队等待将来执行,以便可以处理更重要的事情。 为了做到这一点,你需要一个经纪人 :有人谁将会接受来自不同发件人(即Web应用程序)的消息(如作业,任务),排队它们,并将它们分发给相关方(即工人)要利用他们 - 所有异步和按需。
在这种DigitalOcean文章中,我们的目标是向您介绍了RabbitMQ的项目:它实现了高级消息队列协议(AMQP)来处理我们上面的阐述场景的全部的开源消息代理应用程序栈。
消息传递,消息代理和队列
消息传递是在进程,应用程序和服务器(虚拟和物理)之间交换某些数据的一种方式。 这些消息交换,有助于某些工程需要,可以包括从纯文本消息到二进制数据的块,以满足不同的需求。 对于这项工作,由第三方程序(中间件)管理的接口需要......欢迎消息经纪人 。
消息代理通常是具有覆盖交换设置的每个阶段的专用部分的应用栈。 从接受邮件排队它,并将其传递给请求方,经纪人处理了通常与很多非专用的解决方案或简单的黑客攻击 ,例如使用一个数据库,cron作业等,他们只需处理工作较为繁琐责任其中队列在技术上构成无限缓冲器,放置消息并且稍后弹出并递送以自动地或通过轮询来处理。
为什么要使用它们?
这些消息欺骗解决方案就像一个中间人用于各种服务(例如您的Web应用程序)。 它们可以用于大大减少Web应用程序服务器的负载和传递时间,因为通常需要花费相当多的时间来处理的任务可以委托给第三方,其唯一的工作是执行它们(例如工作者)。 当需要更多的“保证”持久性来将信息从一个地方传递到另一个地方时,它们也会派上用场。
什么时候使用?
总而言之,核心功能解释扩展到涵盖众多领域,包括但不限于:
允许Web服务器快速响应请求,而不是强制在现场执行资源匮乏的过程
将消息分发到多个收件人以供消费(例如处理)
让离线方(即断开连接的用户)稍后提取数据,而不是使其永久丢失
向后端系统引入完全异步的功能
订购和优先级任务
平衡工人之间的负载
大大提高应用程序的可靠性和正常运行时间
以及更多
RabbitMQ
RabbitMQ是市场上更受欢迎的消息代理解决方案之一,提供了开源许可证(Mozilla公共许可证v1.1)作为高级消息队列协议的实现。 使用Erlang语言开发,实际上相对容易使用和开始。 这是首次出版于2007年初,至今看到一个活跃的开发,其最新版本是3.2.2版本 (2013年12月)。
它是如何工作的?
RabbitMQ通过提供接口,通过将数据分发到相关列表(消息队列)的交换(Broker)将消息发送者(发布者)与接收者(消费者)连接。
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默认情况下使用其标准配置运行。 一般来说,只要一切顺利运行,它对大多数需求不需要太多的回火。
要了解配置它定制需求,请查阅其文档配置 。