Java-202 RabbitMQ 生产安装与容器快速启动:Erlang 兼容、RPM 部署与常用命令

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等)

安装步骤说明:

  1. 安装 Erlang:

    • 可以通过 EPEL 仓库安装
    • 或从 Erlang Solutions 获取最新版本
    • 示例命令:yum install erlang
  2. 验证 Erlang:

    • 执行 erl -version 检查安装
    • 确保版本符合 RabbitMQ 要求
  3. 版本兼容性检查:

注意事项:

  • 生产环境建议使用相同次要版本的 Erlang
  • 避免混用不同仓库的软件包
  • 升级时需先检查兼容性矩阵首先我们需要确认的环境准备:
  1. 操作系统环境:

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

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

    • socat:用于集群间通信
    • logrotate:日志轮转管理
    • openssl:安全通信支持
    • 其他编译工具链(gcc, make等)

安装步骤说明:

  1. 安装 Erlang:

    • 可以通过 EPEL 仓库安装
    • 或从 Erlang Solutions 获取最新版本
    • 示例命令:yum install erlang
  2. 验证 Erlang:

    • 执行 erl -version 检查安装
    • 确保版本符合 RabbitMQ 要求
  3. 版本兼容性检查:

注意事项:

  • 生产环境建议使用相同次要版本的 Erlang
  • 避免混用不同仓库的软件包
  • 升级时需先检查兼容性矩阵

socat

我们在服务器上安装 socat:

shell 复制代码
yum install socat -y

Erlang

然后安装 Erlang:

shell 复制代码
https://github.com/rabbitmq/erlang-rpm/releases/download/v23.0.2/erlang-23.0.2-1.el7.x86_64.rpm

将文件上传到服务器后,我们执行安装:

shell 复制代码
rpm -ivh erlang-23.0.2-1.el7.x86_64.rpm

RabbitMQ

接着我们下载MQ:

shell 复制代码
https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.4/rabbitmq-server-3.8.4-1.el7.noarch.rpm

上传到服务器之后,我们安装:

shell 复制代码
rpm -ivh rabbitmq-server-3.8.4-1.el7.noarch.rpm

启动插件

shell 复制代码
rabbitmq-plugins enable rabbitmq_management

启动RabbitMQ服务的几种方式

1. 使用systemctl启动(推荐用于生产环境)
shell 复制代码
systemctl start rabbitmq-server
  • 这是最标准的启动方式,适用于使用systemd的Linux系统
  • 会自动处理服务依赖关系和日志记录
  • 示例场景:在Ubuntu 18.04+/CentOS 7+等现代Linux发行版中使用
2. 直接运行可执行文件(适合开发环境)
shell 复制代码
rabbitmq-server
  • 会在前台运行,方便查看实时日志
  • 按Ctrl+C可停止服务
  • 典型使用场景:本地开发测试时快速启动
3. 后台守护进程模式
shell 复制代码
rabbitmq-server -detached
  • 添加-detached参数使服务在后台运行
  • 不会占用当前终端
  • 停止服务需要使用rabbitmqctl stop
  • 适用情况:需要后台运行但又不想配置systemd服务时

其他相关命令

shell 复制代码
# 查看服务状态
systemctl status rabbitmq-server

# 设置开机自启
systemctl enable rabbitmq-server

# 停止服务
systemctl stop rabbitmq-server

注意:不同Linux发行版的包管理命令可能略有差异,例如在RHEL系使用yum,Debian系使用apt安装时,服务名称保持一致。

添加用户

shell 复制代码
rabbitmqctl add_user root 123456

添加权限

shell 复制代码
rabbitmqctl set_permissions root -p / ".*" ".*" ".*"

设置用户标签(RabbitMQ用户权限管理)

shell 复制代码
rabbitmqctl set_user_tags root administrator

详细说明:

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

  2. 标签类型说明:

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

    • 新用户创建后需要分配管理权限
    • 需要调整现有用户的权限级别
    • 在多租户环境中管理不同用户的访问权限
  4. 相关命令:

    • 查看用户标签:rabbitmqctl list_users
    • 删除用户标签:rabbitmqctl clear_user_tags username

注意事项:

  • 执行此命令需要RabbitMQ管理员权限
  • 修改会立即生效,无需重启服务
  • 建议使用专用管理账号而非root账号进行日常管理### 设置用户标签(RabbitMQ用户权限管理)
shell 复制代码
rabbitmqctl set_user_tags root administrator

详细说明:

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

  2. 标签类型说明:

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

    • 新用户创建后需要分配管理权限
    • 需要调整现有用户的权限级别
    • 在多租户环境中管理不同用户的访问权限
  4. 相关命令:

    • 查看用户标签:rabbitmqctl list_users
    • 删除用户标签:rabbitmqctl clear_user_tags username

注意事项:

  • 执行此命令需要RabbitMQ管理员权限
  • 修改会立即生效,无需重启服务
  • 建议使用专用管理账号而非root账号进行日常管理

标签内容有:

容器安装(学习推荐)

compose

我们可以通过容器来快速启动服务,方便我们学习使用:

yaml 复制代码
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:

内容如下所示:

启动服务

我们启动:

shell 复制代码
docker compose up -d

等待结束:

访问服务

我们访问 15672 端口,填写刚才文件中的账号密码:

RabbitMQ 管理命令大全

服务启动与停止

前台启动

在前台启动 Erlang VM 和 RabbitMQ 服务,适合调试时使用:

bash 复制代码
rabbitmq-server

后台启动

以守护进程方式在后台启动服务,适合生产环境:

bash 复制代码
rabbitmq-server -detached

停止服务

安全停止 RabbitMQ 和 Erlang VM:

bash 复制代码
rabbitmqctl stop

应用管理

应用控制

在 Erlang VM 已运行的情况下控制 RabbitMQ 应用:

bash 复制代码
# 启动应用
rabbitmqctl start_app

# 停止应用(不停止Erlang VM)
rabbitmqctl stop_app

节点状态检查

查看节点运行状态和统计信息:

bash 复制代码
rabbitmqctl status

队列管理

查看队列

列出所有队列及其消息数量(可添加name, messages等参数显示更多信息):

bash 复制代码
rabbitmqctl list_queues

虚拟主机管理

查看所有虚拟主机(vhost):

bash 复制代码
rabbitmqctl list_vhosts

插件管理

插件操作

bash 复制代码
# 列出所有可用插件(包括已启用/未启用的)
rabbitmq-plugins list

# 启用指定插件(如rabbitmq_management)
rabbitmq-plugins enable <plugin-name>

# 停用指定插件
rabbitmq-plugins disable <plugin-name>

用户管理

用户操作

bash 复制代码
# 添加新用户(用户名和密码)
rabbitmqctl add_user username password

# 列出所有用户及其标签
rabbitmqctl list_users

# 删除用户
rabbitmqctl delete_user username

# 清除用户在特定vhost的权限
rabbitmqctl clear_permissions -p vhostpath username

高级用法示例

查看队列详情(带更多参数)

bash 复制代码
rabbitmqctl list_queues name messages messages_ready messages_unacknowledged

创建虚拟主机并设置权限

bash 复制代码
# 创建vhost
rabbitmqctl add_vhost /my_vhost

# 设置用户权限
rabbitmqctl set_permissions -p /my_vhost username ".*" ".*" ".*"

查看连接信息

bash 复制代码
rabbitmqctl list_connections

查看信道信息

bash 复制代码
rabbitmqctl list_channels

错误速查

症状 根因 定位 修复
rpm -ivh rabbitmq-server-...rpm 报依赖缺失 socat/openssl 等依赖未装或版本不匹配 rpm -qpR 包名.rpm,或看报错缺什么库 先装 socat、openssl 等依赖;统一仓库来源,避免混装。
下载 3.8.5,却安装命令写成 3.8.4 文档版本号不一致导致误操作 对比下载链接与 rpm -ivh 文件名 统一为同一版本号;建议把"下载链接/文件名/安装命令"三者对齐。
rabbitmq-server 启动失败,提示 Erlang 版本不兼容 Erlang/OTP 与 RabbitMQ 版本区间不匹配 erl -version;RabbitMQ 启动日志 按官方兼容矩阵选择 Erlang 版本;生产固定"可复现组合"。
systemctl start rabbitmq-server 失败 service unit/权限/数据目录问题或节点没起来 systemctl status + journalctl -u rabbitmq-server 根据日志修复目录权限、磁盘空间、端口占用;必要时清理残留状态后重启。
rabbitmq-plugins enable rabbitmq_management 失败 节点未运行、插件目录不可写、版本不匹配 rabbitmqctl status、插件命令输出 先确保 rabbitmq-server 正常启动;修复权限;核对包版本。
访问 15672 失败(浏览器打不开) 端口未监听/防火墙未放行/管理插件未启用 `ss -lntp grep 15672`;插件列表
用户权限/标签未设置或 vhost 权限缺失 rabbitmqctl list_userslist_permissions -p / set_permissionsset_user_tags 配套执行;确保对目标 vhost 授权。
set_permissions 成功但业务仍拒绝 使用了非 / vhost 或应用连接串 vhost 不一致 管理台查看 vhost;应用连接参数 为实际 vhost 设置权限;统一应用侧 vhost 配置。
Docker Compose 启动后数据丢失 未挂载卷或卷名变化 docker volume ls;容器挂载信息 保持 volumes: rabbitmq_data:/var/lib/rabbitmq;不要频繁改卷名。
Compose 启动报权限/写入失败 宿主机目录/卷权限与容器用户不匹配 docker logs 改用命名卷或修复宿主机目录权限;避免直接挂载无权限路径。
默认账号/弱口令带来安全风险 admin/secret、root/123456 属于可猜测凭据 配置与命令段落可直接识别 学习环境可保留但必须标注"仅限本地/内网";生产改强口令并限制 15672 暴露面。

其他系列

🚀 AI篇持续更新中(长期更新)

AI炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私有部署 测试上手 架构研究 ,持续打造实用AI工具指南!
AI研究-132 Java 生态前沿 2025:Spring、Quarkus、GraalVM、CRaC 与云原生落地
🔗 AI模块直达链接

💻 Java篇持续更新中(长期更新)

Java-196 消息队列选型:RabbitMQ vs RocketMQ vs Kafka

MyBatis 已完结,Spring 已完结,Nginx已完结,Tomcat已完结,分布式服务已完结,Dubbo已完结,MySQL已完结,MongoDB已完结,Neo4j已完结,FastDFS 已完结,OSS已完结,GuavaCache已完结,EVCache已完结,RabbitMQ正在更新... 深入浅出助你打牢基础!
🔗 Java模块直达链接

📊 大数据板块已完成多项干货更新(300篇):

包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!
大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT案例 详解
🔗 大数据模块直达链接

相关推荐
a程序小傲4 小时前
米哈游Java后端面试被问:Spring Boot Starter的制作原理
java·spring boot·后端
Misnearch4 小时前
Mock服务是什么?
java·后端·微服务·mock
后端小张4 小时前
【JAVA 进阶】深入理解Sentinel:分布式系统的流量守卫者
java·开发语言·spring boot·后端·spring·spring cloud·sentinel
cheems95274 小时前
[JavaEE] CAS 介绍
java·开发语言·java-ee
lkbhua莱克瓦244 小时前
IO练习——登入注册
java·开发语言·io流·java练习题
running up4 小时前
Spring-AOP与代理模式
java·spring·代理模式
Seven974 小时前
递归与分治算法
java
风月歌4 小时前
小程序项目之基于微信小程序的高校课堂教学管理系统源代码(源码+文档)
java·微信小程序·小程序·毕业设计·源码
月明长歌4 小时前
【码道初阶】【Leetcode105&106】用遍历序列还原二叉树:前序+中序、后序+中序的统一套路与“先建哪边”的坑
java·开发语言·数据结构·算法·leetcode·二叉树