消息中间件的优势
异步解耦
峰值缓冲
消息推送
备注
RabbitMQ是Erlang写的高并发的消息中间件,所以需要安装Erlang的语言环境
官方文档翻译
Ubuntu和Debian标准库
rabbitmq-server是包含在标准Debian和Ubuntu的库中。但是,经常是些老版本。你可以从rabbitmq.com官网的apt库或者云上拿到更加合适版本的.deb包。检查你的Debian版本和Ubuntu版本用来确定哪个版本的rabbitmq-server才是适合你的。
你既可以通过上面的链接下面,也可以通过dpkg命令下载,或者使用我们的apt库(如下)。
支持的linux发行版本
以下是RabbitMQ 3.6.3支持的基于Debian的发行版列表:
Ubuntu 14.04到16.10
Debian Jessie
Debian Wheezy(需要Wheezy backports仓库)
如果依赖(见下文)满足(例如使用Wheezy backports存储库),则该软件包可能适用于其他基于Debian的发行版,但是它们的测试和支持是尽力而为的。
安装Erlang / OTP
RabbitMQ需要运行Erlang / OTP。标准Debian和Ubuntu中的Erlang / OTP包也可能相当过时。考虑安装较新版本,如19.x.
提供它的Erlang Release系列存储库
19.x Erlang解决方案,Debian Stretch,Debian Jessie backports,Ubuntu Zesty(17.04)
Ubuntu Yakkety(16.10),Ubuntu Xenial(16.04)
17.x Erlang解决方案,Debian Jessie,Debian Wheezy backports
软件包依赖关系
当使用apt进行安装时,所有依赖项都应该在最近的发行版中被自动满足(例如Ubuntu 14.04或更高版本,Debian Jessie)。如果不是这样,依赖关系包应该从适当的backports存储库中获得。但是,当通过dpkg进行安装时并非如此。以下是3.6.3的RabbitMQ服务器的依赖关系列表:
erlang-nox(> = 1:16.b.3)| ESL-Erlang。 Erlang可以从标准的存储库,后端存储库或Erlang解决方案安装。
init-system-helpers> = 1.13。需要systemd支持。
socat
adduser
logrotate
APT存储库
RabbitMQ托管我们自己的apt存储库。我们还在Package Cloud上有一个备用存储库。
使用rabbitmq.com APT存储库
执行以下命令将APT存储库添加到/etc/apt/sources.list.d中:
echo'deb http://www.rabbitmq.com/debian/ testing main'|
sudo tee /etc/apt/sources.list.d/rabbitmq.list
(请注意,这行中的测试字是指我们发布的RabbitMQ的状态,而不是任何特定的Debian发行版,您可以使用Debian稳定,测试或不稳定以及Ubuntu,我们将该版本描述为“测试“强调我们稍微放松一些)
(可选)为避免对未签名包的警告,请使用apt-key(8)将我们的公钥添加到您的信任密钥列表中:
wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
我们的公共签名密钥也可从Bintray获得。
运行以下命令更新软件包列表:
sudo apt-get update
安装rabbitmq-server软件包:
sudo apt-get install rabbitmq-server
使用PackageCloud APT存储库
PackageCloud通过HTTPS安装软件包,并使用GPG密钥对它们进行签名。 有多种安装方式:
提供安装脚本
Using PackageCloud Chef cookbook
Using PackageCloud Puppet module
手动
请参阅PackageCloud RabbitMQ存储库说明。
忽略在12.0的Ubuntu上的安装说明
运行RabbitMQ服务器
自定义RabbitMQ环境变量
服务器应该开始使用默认值。 您可以自定义RabbitMQ环境。 另请参阅如何配置组件。
启动服务器
默认情况下,安装RabbitMQ服务器软件包时,服务器将作为守护程序启动。
作为管理员,通常使用invoke-rc.d rabbitmq-server stop / start / etc启动和停止。
注意:服务器设置为作为系统用户rabbitmq运行。 如果更改Mnesia数据库或日志的位置,则必须确保文件由该用户拥有(并且还更新环境变量)。
端口访问
SELinux和类似的机制可能会阻止RabbitMQ绑定到端口。当这种情况发生时,RabbitMQ将无法启动。防火墙可以防止节点和CLI工具相互通信。确保可以打开以下端口:
4369:epmd,RabbitMQ节点和CLI工具使用的对等发现服务
5672,5671:由AMQP 0-9-1和1.0客户端使用,不带TLS和TLS
25672:Erlang分发用于节点间和CLI工具通信,并从动态范围分配(默认情况下限制为单个端口,计算为AMQP端口+ 20000)。有关详情,请参阅网络指南。
15672:HTTP API客户端和rabbitmqadmin(仅当启用管理插件时)
61613,61414:没有和使用TLS的STOMP客户机(只有启用了STOMP插件)
1883,8883 :( MQTT客户端没有和带有TLS,如果启用了MQTT插件
15674:STOMP-over-WebSockets客户端(只有启用了Web STOMP插件)
15675:MQTT-over-WebSockets客户端(仅当启用了Web MQTT插件时)
可以将RabbitMQ配置为使用不同的端口和特定的网络接口。
默认用户访问
代理创建具有密码访客的用户访客。 未配置的客户端通常将使用这些凭据。 默认情况下,这些凭据只能在以localhost连接到代理时使用,因此在连接任何其他机器之前需要采取措施。
有关如何创建更多用户,删除访客用户或允许远程访问访客用户的信息,请参阅访问控制文档。
Linux上的控制系统限制
运行生产工作负载的RabbitMQ安装可能需要系统限制和内核参数调整才能处理大量的并发连接和队列。需要调整的主要设置是打开文件的最大数量,也称为ulimit -n。许多操作系统上的默认值对于消息传递代理来说太低(例如,在几个Linux发行版上为1024)。我们建议在生产环境中为用户rabbitmq允许至少65536个文件描述符。 4096应该足以满足大多数开发工作负载。
播放有两个限制:OS内核允许的最大打开文件数(fs.file-max)和每用户限制(ulimit -n)。前者必须高于后者。
在使用systemd的发行版上,OS限制通过/etc/systemd/system/rabbitmq-server.service.d/limits.conf中的配置文件进行控制,例如:
[服务]
LimitNOFILE = 300000
在不使用systemd的发行版上调整RabbitMQ的每用户限制的最直接的方法是编辑/ etc / default / rabbitmq-server(由RabbitMQ Debian软件包提供)或rabbitmq-env.conf以调用ulimit之前服务启动。
ulimit -S -n 4096
这个软限制不能超过硬限制(在许多发行版中默认为4096)。硬限制可以通过/etc/security/limits.conf来增加。这也需要启用pam_limits.so模块并重新登录或重新启动。
请注意,运行OS进程不能更改限制。
有关使用sysctl控制fs.file-max的更多信息,请参考关于开放文件限制调优的优秀Riak指南。
验证限制
RabbitMQ管理UI显示可用于“概述”选项卡上使用的文件描述符数。
rabbitmqctl状态
包含相同的值。
以下命令
cat / proc / $ RABBITMQ_BEAM_PROCESS_PID / limits
可用于显示运行过程的有效限制。$ RABBITMQ_BEAM_PROCESS_PID是运行RabbitMQ的Erlang VM的操作系统PID,由rabbitmqctl状态返回。
配置管理工具
配置管理工具(例如Chef,Puppet,BOSH)提供系统限制调整的帮助。我们的开发人员工具指南列出了相关模块和项目。
管理Broker
要停止服务器或检查其状态等,可以使用特定于包的脚本(例如服务工具)或调用rabbitmqctl(作为管理员)。它应该在路径上可用。如果没有代理正在运行,所有的rabbitmqctl命令将报告节点缺失。
调用rabbitmqctl停止服务器。
调用rabbitmqctl状态来检查它是否正在运行。
日志
来自服务器的输出将发送到RABBITMQ_LOG_BASE目录中的RABBITMQ_NODENAME.log文件。其他日志数据写入RABBITMQ_NODENAME-sasl.log。
Broker总是追加到日志文件,所以保留完整的日志记录。
您可以使用logrotate程序进行所有必要的旋转和压缩,您可以更改它。默认情况下,此脚本每周在默认的/ var / log / rabbitmq目录中的文件上运行。请参阅/etc/logrotate.d/rabbitmq-server来配置logrotate。
RabbitMQ在Ubuntu 16.04下的安装与配置
按照上面的介绍,我们选择一种安装方式
添加源
新增公钥(不加会有警告)
更新源
安装rabbitmq-server
echo 'deb http://www.rabbitmq.com/debian/ testing main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list
wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install rabbitmq-server
通过上面介绍的命令invoke-rc.d rabbitmq-server stop/start/etc我们看见进程是启动的
xq@xq-VPCEG17YC:/etc/apt/sources.list.d$ invoke-rc.d rabbitmq-server status
rabbitmq-server.service - RabbitMQ broker
Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)
Active: active (running) since 四 2017-05-25 20:42:25 CST; 5min ago
Main PID: 4865 (beam.smp)
Status: "Initialized"
CGroup: /system.slice/rabbitmq-server.service
├─4865 /usr/lib/erlang/erts-7.3/bin/beam.smp -W w -A 64 -P 1048576 -t 5000000 -stbt db -zdbbl 32000 -K true -- -root /usr/lib/erlang
├─4942 /usr/lib/erlang/erts-7.3/bin/epmd -daemon
├─5074 inet_gethost 4
└─5075 inet_gethost 4
xq-VPCEG17YC rabbitmq-server[4865]: RabbitMQ 3.6.10. Copyright (C) 2007-2017 Pivotal Software, Inc.
xq-VPCEG17YC rabbitmq-server[4865]: ## ## Licensed under the MPL. See http://www.rabbitmq.com/
xq-VPCEG17YC rabbitmq-server[4865]: ## ##
xq-VPCEG17YC rabbitmq-server[4865]: ########## Logs: /var/log/rabbitmq/rabbit@xq-VPCEG17YC.log
xq-VPCEG17YC rabbitmq-server[4865]: ###### ## /var/log/rabbitmq/rabbit@xq-VPCEG17YC-sasl.log
xq-VPCEG17YC rabbitmq-server[4865]: ##########
xq-VPCEG17YC rabbitmq-server[4865]: Starting broker...
xq-VPCEG17YC rabbitmq-server[4865]: systemd unit for activation check: "rabbitmq-server.service"
xq-VPCEG17YC systemd[1]: Started RabbitMQ broker.
xq-VPCEG17YC rabbitmq-server[4865]: completed with 0 plugins.
打开管理页面
sudo rabbitmq-plugins enable rabbitmq_management
查看安装的插件
sudo rabbitmqctl list_users
查看用户
sudo rabbitmqctl list_users
新增管理员用户
sudo rabbitmqctl add_user admin admin
sudo rabbitmqctl set_user_tags admin administrator
用刚设置的账户登录管理页面
http://127.0.0.1:15672