上一篇讲完「为什么用 MQ」和四大选型对比,本篇进入 RabbitMQ 实战——怎么装、怎么管、怎么看。所有命令都是当年在生产/测试环境摸出来的笔记,搬过来原样保留。
一、安装 Erlang
RabbitMQ 用 Erlang 写的,所以先装 Erlang 运行时。
# 解压 erlang 源码包
tar -xzf otp_src_xxx.tar.gz
cd otp_src_xxx
# 配置 + 编译 + 安装
./configure --prefix=/usr/erlang --without-javac
make && make install
# 配置环境变量(追加到 ~/.bashrc 或 /etc/profile)
export ERLANG_HOME=/usr/erlang
export PATH=$ERLANG_HOME/bin:$PATH
# 验证
erl -version
当年踩坑:Erlang 的版本必须和 RabbitMQ 版本严格匹配——RabbitMQ 每个版本都规定了最低/最高 Erlang 版本范围。装错版本会启动失败,且报错信息晦涩。装之前一定去官网查版本对照表。
二、安装 RabbitMQ
# 下载对应版本 rabbit 安装包(推荐 .tar.xz,已经完成编译)
wget https://www.rabbitmq.com/releases/rabbitmq-server/vX.X.X/rabbitmq-server-generic-unix-X.X.X.tar.xz
# 解压
tar -xvf rabbitmq-server-generic-unix-X.X.X.tar.xz -C /usr/
# 配置环境变量
export RABBITMQ_HOME=/usr/rabbitmq_server-X.X.X
export PATH=$RABBITMQ_HOME/sbin:$PATH
2.1 启动 / 停止服务
rabbitmq-server # 启动服务(前台)
rabbitmq-server -detached # 后台启动
rabbitmqctl stop # 停止服务
第一次启动会比较慢,因为要初始化 Mnesia 数据库。看到
starting broker... completed才算启动成功。
三、启用 Web 监控
RabbitMQ 自带的 web 管理界面非常强大,生产环境必开:
rabbitmq-plugins enable rabbitmq_management
启用后访问 http://localhost:15672 即可打开管理界面。
默认账号密码:
guest/guest。但是guest只能本地访问——远程访问会被拒绝。要让远程访问,要么改配置(不推荐),要么新建一个非 guest 用户(推荐)。
四、启用消息跟踪
调试阶段非常有用的插件——把消息投递/消费的过程记录成日志:
rabbitmq-plugins enable rabbitmq_tracing
启用后,在 web 管理界面的 Admin 标签下会出现 Tracing 选项,可以创建 trace 来记录指定 vhost 的所有消息流。
生产环境慎用:消息跟踪会写大量日志,磁盘和性能都吃不消。线上排查问题用
firehose(短线开启)更合适。
五、配置文件
RabbitMQ 的配置文件位置由 sbin/rabbitmq-defaults 中的 CONFIG_FILE 变量决定:
# 编辑 sbin/rabbitmq-defaults
CONFIG_FILE=/etc/rabbitmq/rabbitmq # 指定目录和文件名(不需要后缀,会自动加 .config)
配置文件常见项:端口、日志级别、内存水位、TCP 参数。绝大多数运维场景下,默认配置就够了——需要改的场景多半也是用
rabbitmqctl set_policy动态调整,不必改文件。
六、用户管理
6.1 在 Web 界面创建用户
Admin → Users → Add a user:
- 填用户名、密码
- Tags 设置权限角色:
administrator:超级管理员management:可访问 web 管理policymaker:可管理 policymonitoring:可监控- “(空):无 web 权限
6.2 命令行管理用户
# 新建用户
rabbitmqctl add_user username password
# 删除用户
rabbitmqctl delete_user username
# 用户列表
rabbitmqctl list_users
# 更改密码
rabbitmqctl change_password username newpwd
# 设置用户角色(tags)
rabbitmqctl set_user_tags username administrator
生产环境建议:为每个应用建独立账号,按 vhost 隔离权限。不要多个应用共用一个账号——一旦泄漏或被改密码,影响面会爆炸。
七、rabbitmqctl 命令速查
7.1 服务管理
| 命令 | 作用 |
|---|---|
rabbitmq-server | 启动服务(前台) |
rabbitmq-server -detached | 后台启动 |
rabbitmqctl stop | 停止服务 |
rabbitmqctl status | 查看节点状态 |
rabbitmqctl cluster_status | 查看集群状态 |
7.2 用户管理
| 命令 | 作用 |
|---|---|
rabbitmqctl add_user <name> <pass> | 新建用户 |
rabbitmqctl delete_user <name> | 删除用户 |
rabbitmqctl list_users | 用户列表 |
rabbitmqctl change_password <name> <pass> | 改密码 |
rabbitmqctl set_user_tags <name> <tag> | 设置角色 |
7.3 vhost / 权限
| 命令 | 作用 |
|---|---|
rabbitmqctl add_vhost <name> | 新建 vhost |
rabbitmqctl list_vhosts | 列出 vhost |
rabbitmqctl set_permissions -p <vhost> <user> <conf> <write> <read> | 授权 |
7.4 队列 / 交换机
| 命令 | 作用 |
|---|---|
rabbitmqctl list_queues | 列出所有队列 |
rabbitmqctl list_queues -p <vhost> | 列出指定 vhost 的队列 |
rabbitmqctl list_exchanges | 列出所有交换机 |
rabbitmqctl list_bindings | 列出绑定关系 |
实战技巧:用
list_queues时加上name messages messages_ready messages_unacknowledged参数,能直接看到每条队列的堆积情况——这是排查消费者是否跟上的第一手指标:
rabbitmqctl list_queues name messages messages_ready messages_unacknowledged
7.5 策略(Policy)
策略是 RabbitMQ 动态控制队列行为的核心机制——比如开启镜像、设置 TTL、死信路由:
# 给以 ha. 开头的队列设置镜像策略(所有节点镜像)
rabbitmqctl set_policy ha-all "^ha\." \
'{"ha-mode":"all","ha-sync-mode":"automatic"}'
生产环境几乎一定要配 Policy。镜像队列、TTL、死信全部通过 Policy 控制,而不是声明队列时硬编码——前者改起来不用动代码。
八、运维检查清单
新装一个 RabbitMQ 节点,上线前过一遍:
- Erlang 版本与 RabbitMQ 版本匹配
- web 管理插件已启用,新管理员账号已创建
-
guest账号已禁用或改密(默认密码等同没密码) - vhost 划分完成(按环境/应用隔离)
- 各应用账号权限按 vhost 收敛
- 内存水位
vm_memory_high_watermark调整合理(默认 0.4) - 磁盘空间阈值
disk_free_limit调整合理 - 日志路径确认、日志切割配置完成
- 监控接入(Prometheus exporter / Zabbix)
- 集群方案确定(普通/镜像/Quorum)
这十项过完,节点才算「能上线」。RabbitMQ 的运维坑不少——新装时偷懒,上线后还债。
九、小结
| 阶段 | 关键操作 |
|---|---|
| 安装 | Erlang + RabbitMQ + 环境变量 |
| 启动 | rabbitmq-server -detached |
| 监控 | rabbitmq-plugins enable rabbitmq_management |
| 排查 | rabbitmqctl list_queues、web 界面看堆积 |
| 调优 | Policy 动态调整(镜像、TTL、死信) |
下一篇「消息队列(下):Spring Boot 集成 RabbitMQ」进入最贴业务的部分——怎么在 Spring Boot 里发消息、消费消息、保证可靠性。
现代视角补一句(2026):现在 RabbitMQ 官方推荐用 Quorum Queue(基于 Raft 的仲裁队列)替代老的镜像队列——但
rabbitmqctl命令本身几乎没变。运维层的肌肉记忆可以原样沿用。