TL;DR

  • 场景: RHEL 系(CentOS/RockyLinux)用 RPM 做 RabbitMQ 生产部署,同时用 Docker Compose 快速学习。
  • 结论: 关键风险在 Erlang/RabbitMQ 版本兼容与包来源一致性;其次是端口、插件、用户权限与安全基线。
  • 产出: 给出可落地的安装路径、版本矩阵写法与高频报错速查卡,便于上线排障。

RabbitMQ 安装

服务安装(生产推荐)

环境准备

  1. 操作系统环境:

    • 支持 CentOS 7/8、RockyLinux 8/9 等 RHEL 系发行版
    • 建议使用最小化安装的系统,减少不必要的软件冲突
  2. Erlang 环境要求:

    • RabbitMQ 是基于 Erlang 虚拟机(BEAM)运行的消息中间件
    • 必须预先安装兼容版本的 Erlang 运行时
    • 建议版本不低于 Erlang 23.x
  3. 系统依赖包:

    • 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

详细说明

  1. 此命令用于为 RabbitMQ 用户设置标签,给用户 root 添加 administrator 管理员标签

  2. 标签类型说明:

    • administrator:管理员权限,拥有所有操作权限
    • monitoring:监控权限,可以查看所有信息但不能修改
    • policymaker:策略制定权限,可以管理虚拟主机策略
    • management:基本管理权限,可以使用管理插件
  3. 相关命令:

    • 查看用户标签: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_usersset_permissionsset_user_tags 配套执行
设置权限成功但业务仍拒绝使用了非 / vhost管理台查看 vhost为实际 vhost 设置权限
Docker Compose 启动后数据丢失未挂载卷或卷名变化docker volume ls保持卷配置
默认账号/弱口令带来安全风险admin/secret、root/123456 属于可猜测凭据配置与命令段落生产改强口令并限制暴露面