RabbitMQ教程(一)——安装配置

RabbitMQ教程(一)——安装配置

一、前言

  由于最近在学习RabbitMQ消息队列,但是鉴于网上对于官网介绍的教程比较少或者由于时间长长期未更新,因此决定将对官网的RabbitMQ入门教程进行翻译加总结,当然对于有一定英语阅读能力的同学还是建议直接阅读官网文档!

  注:本博客写于2017年8月RabbitMQ官网最新的关于RabbitMQ的介绍,本系列教程均为Java

  官网地址:https://www.rabbitmq.com

  教程地址:https://www.rabbitmq.com/getstarted.html

二、安装RabbitMQ

  操作系统:Ubuntu16.04

1. 安装RabbitMQ

  RabbitMQ需要使用Erlang/OTP来运行,因为RabbitMQ是由Erlang编写的,所以运行时需要Erlang依赖。Erlang/OTP的版本也可能是过时的,考虑安装一个更加新的版本,例如19.3,你可以根据你的Ubuntu版本号确定对应的Erlang是否满足要求

Erlang 发行号 提供的版本库号
20.x 不支持,并将导致从较早的Erlang / OTP版本升级到数据丢失,避免除非本文档更新,否则建议。
19.x Erlang Solutions, Debian Stretch, Debian Jessie backports, Ubuntu Zesty (17.04)
18.x Erlang Solutions, Ubuntu Yakkety (16.10), Ubuntu Xenial (16.04)
17.x Erlang Solutions, Debian Jessie, Debian Wheezy backports

  在Ubuntu中,你只需要使用使用如下命令即可直接安装RabbitMQ以及其所需的Erlang依赖

sudo apt-get update
sudo apt-get install rabbitmq-server

  以下图为证,Erlang等一系列依赖项将被安装:

  至此,RabbitMQ已被安装,非常简单。

2. 运行RabbitMQ Server

2.1 配置RabbitMQ的环境变量(系统参数)

下载完成之后,配置文件rabbitmq-env.conf默认在/etc/rabbitmq/文件夹下,通过cat显示文件内容可以看到

cat /etc/rabbitmq/rabbitmq-env.conf

参数:

  NODENAME,默认值为rabbit。如果你想在你的一台机器上运行多个rabbitmq时,通过设置rabbitmq的NODENAME参数作为ID加以区分,每台机器上的NODENAME应该不相同。

  NODE_IP_ADDRESS,默认值为127.0.0.1。默认绑定到所有可以检索到的IPV4以及IPV6的地址,如果需要绑定到一个特定的网络端口或者地址簇时进行设置;

  NODE_PORT,默认值为5672。默认端口号为5672,如果发生端口冲突,直接修改端口号即可。

2.2 启动Server

  当RabbitMQ包被安装后,Server将默认作为守护进程开启。

  如果是管理员(Root),则在Ubuntu系统中直接使用如下命令开启或停止RabbitMQ Server

开启:service rabbitmq-server start
关闭:service rabbitmq-server stop

  此外,官网给出了如下的提醒:RabbitMQ Server安装运行后是作为系统用户rabbitmq的,如果你改变了节点数据库(node database)或日志文件的位置,你必须确保这些文件被用户所拥有并且需要更新环境变量。

3. 端口权限

  SELinux(安装在内核的安全模块,默认包含在:Fedora、Red Hat Enterprise、Debian 以及CentOS)并且类似的机制可能会组织RabbitMQ绑定到特定的端口。当出现这样的问题时,RabbitMQ可能会启动失败。另外防火墙会组织RabbitMQ节点与CLI(命令终端)进行交互,需要确保以下端口的开放:4396,5682,5671,25672,15672,61613,61614,1883,8883,15674,15675

4.  用户权限

  RabbitMQ默认创建一个用户名为guest,密码为guest的用户,未配置的客户端通常需要使用这个guest账号作为登录凭据。当然guest账号只能在连接本地localhost时使用,所以,如果你想从其他机器中远程连接,你就需要进行一定的配置。具体配置创建用户,删除guest账户,允许guest用户获得远程权限,可以参考官网文档(暂未写博,敬请期待):

  用户权限配置:https://www.rabbitmq.com/networking.html

5. 控制Linux上的系统限制

  运行生产工作负载的RabbitMQ安装可能需要系统限制和内核参数调整才能处理大量的并发连接和队列。需要调整的主要设置是打开文件的最大数量,正如我们所知的:ulimit -n命令。在许多操作系统上的默认值对于消息队列来说太低了(例如在一些Linux的发行版本上为1024),对于在生产环境中的rabbitmq用户,我们推荐设置值最少为65536的文件描述符。

  其中主要有两个限制:

  第一个是操作系统内核允许的最大打开文件数:fs.file-max

  另一个是每个用户的打开文件限制:ulimit -n

  不难发现,前者应该大于后者。

A. 拥有systemd的Linux(最近的Linux发行版)

  在这些可以使用systemd的发行版中,操作系统的文件打开上限可以被一个配置文件进行设置

  文件位置:/etc/systemd/system/rabbitmq-server.service.d/limits.conf,直接进行编辑设置,例如:

  设置LimitNOFILE=300000

B. 没有systemd的Linux(老版的Linux发行版)

  在这些不适用systemd的发行版中最直接的调整每个用户对于RabbitMQ的限制的方式是:

  编辑/etc/default/rabbitmq-server文件的ulimit -n,删除注释并且修改值:

  或者编辑rabbitmq-env.conf中加入:

ulimit -S -n 4096

  将每个用户的最大打开文件描述符数设置为4096,以在RabbitMQ服务并没有启动的时候每次都能被调用。

  这个软件限制不能超过硬件限制(在许多发行版中默认为4096)。 硬限制可以通过/etc/security/limits.conf来增加。 这也需要启用pam_limits.so模块并重新登录或重新启动。 请注意,运行OS进程不能更改设置。 

6. 验证限制

  在RabbitMQ安装后,会提供RabbitMQ management UI在总览标签视图上显示可获得的文件描述符的数量。

  其中开启RabbitMQ Management插件开启管理的Web界面,开启命令为:

rabbitmq-plugins enable rabbitmq_management

  注意,就像上文提到过的,RabbitMQ默认的guest用户只能在localhost本地登录(即在虚拟机中可以打开浏览器访问:localhost:15672,账号名:guest,密码:guest)

  具体的RabbitMQ管理配置文档、添加Adminastrator用户以及开启远程连接(暂未写博,敬请期待):https://www.rabbitmq.com/management.html

  可以看到当前打开的文件描述符最大限制为65536,当前已经打开了21个:

  或者通过运行命令行,查找出文件描述符的总数等更加详细的参数:

rabbitmqctl status

  详细参数都打印出来,其中文件描述符(file_discriptors)参数如下:

  对于展示运行进程的限制,可以在rabbitmqctl status命令运行后查看pid的值:

  然后在命令行输入cat /proc/$RABBITMQ_BEAM_PROCESS_PID/limits,其中RABBITMQ_BEAM_PROCESS_PID参数值为运行rabbitmqctl status后看到的值,本例中为:

cat /proc/6718/limits

  显示此进程的各种详细限制如下:

7. 配置管理工具

  停止rabbitmq:

rabbitmqctl stop

  查看rabbitmq的运行状态:

rabbitmqctl status

  关于rabbitmqctl更多的官网文档(暂未写博,敬请期待):https://www.rabbitmq.com/man/rabbitmqctl.1.man.html

8. 日志

  来自服务器的输出将发送到RABBITMQ_LOG_BASE目录中的RABBITMQ_NODENAME.log文件。其他日志数据写入RABBITMQ_NODENAME-sasl.log。

  消息队列总是追加到日志文件,所以完整的日志记录将得到保留。

  可以使用logrotate程序进行所有必要的旋转和压缩,您可以更改它。默认情况下,此脚本每周在默认的/ var / log / rabbitmq目录中的文件上运行。

三、小结

  RabbitMQ是一个出色的消息队列,在解耦合、应对高并发以及高吞吐量的场景拥有广泛的应用,对于RabbitMQ的学习还将进一步深入,敬请期待!

posted @ 2017-08-17 17:19  letcafe  阅读(4537)  评论(0编辑  收藏  举报