4. RabbitMQ环境搭建:在Linux/Docker中安装RabbitMQ,启用管理插件

好,咱们进入实战环节了。环境搭建这事儿,说简单也简单,说坑也多。我见过不少新手在安装这一步就卡了半天,其实没必要。今天我就把两种主流方式——Linux 直接安装Docker 部署——都给你捋一遍,顺便把管理插件也带上。

4.1 为什么推荐先学环境搭建?

你想想看,消息队列这东西,你光看理论不看实际跑起来,永远隔着一层。我个人习惯是:先搭环境,再跑 Demo,最后啃原理。这样你脑子里有个具体的画面,后面讲 Exchange、Binding 这些概念时,你就能对应到控制台上看到的按钮。

嗯,这里要注意:RabbitMQ 对 Erlang 版本有依赖。我在项目中遇到过有人直接 apt install 结果版本对不上,折腾半天。所以咱们还是用官方推荐的方式走。

4.2 方式一:Linux 直接安装(以 CentOS 7 / Ubuntu 20.04 为例)

4.2.1 安装 Erlang

RabbitMQ 是用 Erlang 写的,所以必须先装 Erlang。别自己去源码编译,太慢了。用官方仓库最稳。

CentOS 7:

# 添加 Erlang 官方仓库
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash

# 安装 Erlang
sudo yum install erlang-25.3.2-1.el7.x86_64

# 验证
erl -version

Ubuntu 20.04:

# 添加 Erlang 仓库
wget -O- https://packagecloud.io/rabbitmq/rabbitmq-server/gpg.key | sudo apt-key add -
echo "deb https://packagecloud.io/rabbitmq/erlang/ubuntu/ focal main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list

sudo apt update
sudo apt install erlang-base erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key erlang-snmp erlang-ssl erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl

# 验证
erl -version
⚠️ 避坑指南: 我曾经在 CentOS 上直接用 yum install erlang,结果装了个老版本 20.x,RabbitMQ 3.12 根本跑不起来。所以一定要用 RabbitMQ 官方推荐的 Erlang 版本。建议去 https://www.rabbitmq.com/which-erlang.html 对照一下版本兼容矩阵。

4.2.2 安装 RabbitMQ Server

Erlang 装好之后,装 RabbitMQ 本身反而简单了。

CentOS 7:

# 添加 RabbitMQ 仓库
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash

sudo yum install rabbitmq-server-3.12.6-1.el7.noarch

# 启动并设置开机自启
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server

# 查看状态
sudo systemctl status rabbitmq-server

Ubuntu 20.04:

# 添加 RabbitMQ 仓库
echo "deb https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ focal main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list

sudo apt update
sudo apt install rabbitmq-server

# 启动
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server

# 查看状态
sudo systemctl status rabbitmq-server
💡 小技巧: 启动后可以用 sudo rabbitmqctl status 查看详细状态。如果看到 Status of node rabbit@localhost ... 并且没有报错,说明启动成功了。我习惯用这个命令而不是 systemctl status,因为它会显示更多运行时信息。

4.2.3 启用管理插件

RabbitMQ 默认只开了 AMQP 端口(5672),没有 Web 管理界面。咱们得手动启用管理插件。

# 启用管理插件
sudo rabbitmq-plugins enable rabbitmq_management

# 重启服务使配置生效
sudo systemctl restart rabbitmq-server

启用后,访问 http://你的服务器IP:15672 就能看到登录页面了。

默认用户名密码是 guest / guest。但注意:从 RabbitMQ 3.3 开始,guest 用户只能在 localhost 登录。如果你要通过远程访问,需要创建一个新用户。

# 创建管理员用户
sudo rabbitmqctl add_user admin your_password
sudo rabbitmqctl set_user_tags admin administrator
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
⚠️ 避坑指南: 我曾经在生产环境忘了改 guest 密码,结果被扫描工具扫到了弱口令。虽然 RabbitMQ 限制了 guest 只能本地登录,但为了安全,建议直接禁用 guest 或改密码:sudo rabbitmqctl change_password guest new_password

4.3 方式二:Docker 部署(推荐开发环境使用)

说实话,我现在自己玩或者做 Demo,基本都用 Docker。干净、快速、不污染宿主机。你想想看,一条命令就能跑起来,多省事。

4.3.1 拉取镜像并启动

# 拉取带管理插件的镜像(management 标签已经包含了管理插件)
docker pull rabbitmq:3.12-management

# 启动容器
docker run -d \
  --name rabbitmq \
  -p 5672:5672 \
  -p 15672:15672 \
  -e RABBITMQ_DEFAULT_USER=admin \
  -e RABBITMQ_DEFAULT_PASS=admin123 \
  rabbitmq:3.12-management

这里解释一下参数:

  • -p 5672:5672:AMQP 协议端口,给客户端连接用
  • -p 15672:15672:Web 管理界面端口
  • -e RABBITMQ_DEFAULT_USER/PASS:设置默认管理员账号

启动后,访问 http://localhost:15672,用 admin / admin123 登录。

💡 小技巧: 如果你需要持久化数据,可以挂载卷:-v rabbitmq_data:/var/lib/rabbitmq。这样容器删了数据还在。我一般在开发环境不挂载,因为重启就是全新环境,反而方便测试。

4.3.2 验证管理插件是否正常

登录 Web 管理界面后,你应该能看到:

  • 总览(Overview):连接数、队列数、消息速率
  • 连接(Connections):当前客户端连接
  • 通道(Channels):每个连接下的通道
  • 交换器(Exchanges):所有 Exchange
  • 队列(Queues):所有 Queue
  • 管理(Admin):用户、虚拟主机、权限

我个人习惯先看 Overview 页面。如果看到绿色的 "Status: running",说明一切正常。然后我会点开 Queues 看看有没有默认队列——嗯,新安装的 RabbitMQ 应该是空的。

4.4 两种方式对比

对比维度 Linux 直接安装 Docker 部署
安装复杂度 中等(需处理 Erlang 依赖) 低(一条命令)
环境隔离 差(直接装在宿主机) 好(容器隔离)
版本切换 麻烦(需卸载重装) 简单(换 tag 即可)
生产环境推荐 ✅ 推荐(性能更好) ❌ 不推荐(除非有 K8s)
开发/学习推荐 ❌ 不推荐 ✅ 强烈推荐

说白了,学习阶段用 Docker,生产环境用 Linux 直接安装。这个原则适用于大多数中间件,不只是 RabbitMQ。

4.5 常见问题排查

环境搭建时最容易出问题的几个点,我列一下:

  1. 端口被占用:5672 或 15672 被其他程序占了。用 netstat -tlnp | grep 5672 查一下。
  2. 防火墙没开:远程访问 15672 时,记得放行端口。CentOS 用 firewall-cmd --add-port=15672/tcp --permanent
  3. Erlang 版本不匹配:这个最常见。用 erl -version 查看版本,然后去官网对照兼容列表。
  4. Docker 容器启动后马上退出:用 docker logs rabbitmq 看日志。多半是端口冲突或权限问题。

核心要点回顾:

  • Linux 安装:先装 Erlang(用官方仓库),再装 RabbitMQ,最后 enable 管理插件
  • Docker 安装:直接用 rabbitmq:3.12-management 镜像,一条命令搞定
  • 管理插件:访问 15672 端口,创建管理员用户
  • 开发用 Docker,生产用 Linux 直接安装

好了,环境搭好之后,下一章咱们就可以真正开始写代码了。到时候我会用 Python 和 Java 各写一个 Demo,让你感受一下消息的发送和接收。嗯,先到这,你去把环境跑起来吧。