RabbitMQ是基于Erlang语言开发的消息队列中间件,在Linux系统中安装它需要先完成Erlang环境的部署,再安装RabbitMQ服务端,最后进行基础配置和启动验证。
安装前准备
首先需要确认当前Linux系统的版本,不同版本的包管理工具和依赖库存在差异,本文以CentOS 7系统为例进行演示,其他Linux发行版流程类似,仅包安装命令有所不同。
安装前需要更新系统的基础软件包,执行以下命令:
# 更新系统软件包 sudo yum update -y
安装Erlang环境
RabbitMQ的运行依赖Erlang环境,需要先安装匹配版本的Erlang。首先添加Erlang的官方仓库,再执行安装命令。
添加Erlang仓库的配置:
# 安装仓库配置工具 sudo yum install -y epel-release # 添加Erlang Solutions仓库 sudo rpm -Uvh https://packages.erlang-solutions.com/erlang-solutions-2.0-1.noarch.rpm
安装Erlang:
# 安装Erlang sudo yum install -y erlang
安装完成后可以验证Erlang版本,确保安装成功:
# 查看Erlang版本 erl -version
安装RabbitMQ服务端
Erlang环境安装完成后,就可以安装RabbitMQ服务端了。首先下载RabbitMQ的RPM安装包,这里选择稳定版本3.12.0进行演示。
# 下载RabbitMQ安装包 wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.12.0/rabbitmq-server-3.12.0-1.el7.noarch.rpm # 安装RabbitMQ服务端 sudo yum install -y rabbitmq-server-3.12.0-1.el7.noarch.rpm
如果遇到依赖缺失的问题,可以先安装对应的依赖包,再重新执行安装命令。
启动和配置RabbitMQ
安装完成后,需要启动RabbitMQ服务并设置开机自启。
# 启动RabbitMQ服务 sudo systemctl start rabbitmq-server # 设置开机自启 sudo systemctl enable rabbitmq-server # 查看服务状态 sudo systemctl status rabbitmq-server
默认情况下RabbitMQ的管理插件没有开启,需要手动启用管理插件,方便后续通过Web界面管理队列。
# 启用管理插件 sudo rabbitmq-plugins enable rabbitmq_management
管理插件启用后,默认会监听15672端口,访问地址为http://服务器IP:15672,默认的用户名和密码都是guest,但guest用户默认只能本地访问,需要创建新的管理员用户。
创建管理员用户的命令如下:
# 创建用户,设置用户名和密码 sudo rabbitmqctl add_user admin 123456 # 设置用户为管理员角色 sudo rabbitmqctl set_user_tags admin administrator # 设置用户权限,允许访问所有虚拟主机 sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
安装验证
完成上述步骤后,可以通过两种方式验证安装是否成功。第一种是查看服务状态,确认服务正常运行;第二种是访问Web管理界面,使用刚创建的管理员账号登录。
也可以通过命令行发送测试消息验证功能是否正常:
# 列出所有队列 sudo rabbitmqctl list_queues
如果服务状态显示active,且Web界面可以正常登录,说明RabbitMQ已经成功安装并可以正常使用。
常见问题处理
如果安装过程中提示Erlang版本不匹配,需要确认RabbitMQ版本对应的Erlang版本要求,安装对应版本的Erlang。如果服务启动失败,可以查看/var/log/rabbitmq/目录下的日志文件,定位具体的错误原因。
如果防火墙开启了对应端口,需要放行15672、5672两个端口,5672是RabbitMQ的服务端口,用于客户端连接。
# 放行端口 sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent sudo firewall-cmd --zone=public --add-port=5672/tcp --permanent # 重新加载防火墙规则 sudo firewall-cmd --reload