TL;DR
- 场景: RHEL 系(CentOS/RockyLinux)用 RPM 做 RabbitMQ 生产部署,同时用 Docker Compose 快速学习。
- 结论: 关键风险在 Erlang/RabbitMQ 版本兼容与包来源一致性;其次是端口、插件、用户权限与安全基线。
- 产出: 给出可落地的安装路径、版本矩阵写法与高频报错速查卡,便于上线排障。
RabbitMQ 安装
服务安装(生产推荐)
环境准备
-
操作系统环境:
- 支持 CentOS 7/8、RockyLinux 8/9 等 RHEL 系发行版
- 建议使用最小化安装的系统,减少不必要的软件冲突
-
Erlang 环境要求:
- RabbitMQ 是基于 Erlang 虚拟机(BEAM)运行的消息中间件
- 必须预先安装兼容版本的 Erlang 运行时
- 建议版本不低于 Erlang 23.x
-
系统依赖包:
- socat:用于集群间通信
- logrotate:日志轮转管理
- openssl:安全通信支持
- 其他编译工具链(gcc, make等)
socat 安装
yum install socat -y
Erlang 安装
下载 Erlang RPM 包:
https://github.com/rabbitmq/erlang-rpm/releases/download/v23.0.2/erlang-23.0.2-1.el7.x86_64.rpm
将文件上传到服务器后,执行安装:
rpm -ivh erlang-23.0.2-1.el7.x86_64.rpm
RabbitMQ 安装
下载 RabbitMQ:
https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.4/rabbitmq-server-3.8.4-1.el7.noarch.rpm
上传到服务器之后,安装:
rpm -ivh rabbitmq-server-3.8.4-1.el7.noarch.rpm
启动插件
rabbitmq-plugins enable rabbitmq_management
启动 RabbitMQ 服务的几种方式
1. 使用 systemctl 启动(推荐用于生产环境)
systemctl start rabbitmq-server
- 这是最标准的启动方式,适用于使用 systemd 的 Linux 系统
- 会自动处理服务依赖关系和日志记录
2. 直接运行可执行文件(适合开发环境)
rabbitmq-server
- 会在前台运行,方便查看实时日志
- 按 Ctrl+C 可停止服务
- 典型使用场景:本地开发测试时快速启动
3. 后台守护进程模式
rabbitmq-server -detached
- 添加
-detached参数使服务在后台运行 - 不会占用当前终端
- 停止服务需要使用
rabbitmqctl stop
其他相关命令
# 查看服务状态
systemctl status rabbitmq-server
# 设置开机自启
systemctl enable rabbitmq-server
# 停止服务
systemctl stop rabbitmq-server
添加用户
rabbitmqctl add_user root 123456
添加权限
rabbitmqctl set_permissions root -p / ".*" ".*" ".*"
设置用户标签(RabbitMQ 用户权限管理)
rabbitmqctl set_user_tags root administrator
详细说明:
-
此命令用于为 RabbitMQ 用户设置标签,给用户
root添加administrator管理员标签 -
标签类型说明:
administrator:管理员权限,拥有所有操作权限monitoring:监控权限,可以查看所有信息但不能修改policymaker:策略制定权限,可以管理虚拟主机策略management:基本管理权限,可以使用管理插件
-
相关命令:
- 查看用户标签:
rabbitmqctl list_users - 删除用户标签:
rabbitmqctl clear_user_tags username
- 查看用户标签:
容器安装(学习推荐)
Docker Compose
通过容器快速启动服务:
services:
rabbitmq:
image: rabbitmq:3.8.4-management
container_name: rabbitmq-3.8
restart: unless-stopped
ports:
- "5672:5672" # AMQP
- "15672:15672" # 管理界面
environment:
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: secret
volumes:
- rabbitmq_data:/var/lib/rabbitmq
volumes:
rabbitmq_data:
启动服务
docker compose up -d
访问服务
访问 15672 端口,填写刚才文件中的账号密码:
- 用户名:admin
- 密码:secret
RabbitMQ 管理命令大全
服务启动与停止
前台启动
rabbitmq-server
后台启动
rabbitmq-server -detached
停止服务
rabbitmqctl stop
应用管理
应用控制
# 启动应用
rabbitmqctl start_app
# 停止应用(不停止Erlang VM)
rabbitmqctl stop_app
节点状态检查
rabbitmqctl status
队列管理
查看队列
rabbitmqctl list_queues
虚拟主机管理
rabbitmqctl list_vhosts
插件管理
# 列出所有可用插件
rabbitmq-plugins list
# 启用指定插件
rabbitmq-plugins enable <plugin-name>
# 停用指定插件
rabbitmq-plugins disable <plugin-name>
用户管理
# 添加新用户
rabbitmqctl add_user username password
# 列出所有用户
rabbitmqctl list_users
# 删除用户
rabbitmqctl delete_user username
# 清除权限
rabbitmqctl clear_permissions -p vhostpath username
高级用法示例
查看队列详情
rabbitmqctl list_queues name messages messages_ready messages_unacknowledged
创建虚拟主机并设置权限
# 创建vhost
rabbitmqctl add_vhost /my_vhost
# 设置用户权限
rabbitmqctl set_permissions -p /my_vhost username ".*" ".*" ".*"
查看连接信息
rabbitmqctl list_connections
查看信道信息
rabbitmqctl list_channels
错误速查
| 症状 | 根因 | 定位 | 修复 |
|---|---|---|---|
rpm -ivh rabbitmq-server-...rpm 报依赖缺失 | socat/openssl 等依赖未装或版本不匹配 | rpm -qpR 包名.rpm | 先装依赖;统一仓库来源 |
| RabbitMQ 版本号不一致 | 文档版本号不一致导致误操作 | 对比下载链接与安装文件名 | 统一版本号 |
| 启动失败,提示 Erlang 版本不兼容 | Erlang/OTP 与 RabbitMQ 版本区间不匹配 | erl -version;启动日志 | 按官方兼容矩阵选择 Erlang 版本 |
systemctl start rabbitmq-server 失败 | service unit/权限/数据目录问题 | systemctl status + journalctl -u rabbitmq-server | 根据日志修复 |
rabbitmq-plugins enable 失败 | 节点未运行、插件目录不可写 | rabbitmqctl status | 先确保服务正常启动 |
| 访问 15672 失败 | 端口未监听/防火墙未放行/插件未启用 | ss -lntp|grep 15672 | 检查防火墙和插件状态 |
| 添加用户后登录管理台失败 | 用户权限/标签未设置或 vhost 权限缺失 | rabbitmqctl list_users | set_permissions 与 set_user_tags 配套执行 |
| 设置权限成功但业务仍拒绝 | 使用了非 / vhost | 管理台查看 vhost | 为实际 vhost 设置权限 |
| Docker Compose 启动后数据丢失 | 未挂载卷或卷名变化 | docker volume ls | 保持卷配置 |
| 默认账号/弱口令带来安全风险 | admin/secret、root/123456 属于可猜测凭据 | 配置与命令段落 | 生产改强口令并限制暴露面 |