RabbitMQ消息队列:零基础快速部署

什么是 RabbitMQ 消息队列?

RabbitMQ 是一个开源的消息代理(Message Broker),基于 AMQP 协议,负责在应用之间异步传递数据。
简单说,它像是一个“快递中转站”,生产方把消息丢进去,消费方按需取走,从而解耦系统、削峰填谷。

很多新手在搭建第一个 RabbitMQ 环境时会遇到启动失败、端口不通、认证报错等问题。
这篇教程会带你从零开始在 Ubuntu 20.04/22.04 上完成部署,并验证消息队列是否正常工作。

准备条件

  • 一台 Linux 服务器(本文以 Ubuntu 22.04 为例),建议内存 ≥ 1GB。
  • 具有 sudo 权限的普通用户。
  • 服务器能正常访问公网(用于下载安装包)。
  • 防火墙放行 5672(AMQP 端口)和 15672(管理插件端口),如果你用云服务商,记得在安全组添加规则。

安装 RabbitMQ 服务

RabbitMQ 官方推荐使用 Erlang 和 RabbitMQ 的 APT 仓库来安装,这样可以保证依赖和版本一致。

  1. 添加 Erlang 和 RabbitMQ 的仓库密钥
   wget -O- https://packages.erlang-solutions.com/ubuntu/erlang_solutions.asc | sudo apt-key add -
   sudo apt update
  1. 安装 Erlang(RabbitMQ 运行依赖)
   sudo apt install -y erlang-base erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
   erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key erlang-runtime-tools erlang-snmp \
   erlang-ssl erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl

如果网络较慢,也可以直接用 apt install erlang 安装完整版,但包会偏大。

  1. 添加 RabbitMQ 仓库并安装
   curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc | sudo apt-key add -
   sudo tee /etc/apt/sources.list.d/rabbitmq.list <

注:上述仓库地址可能随时间变化,建议访问 RabbitMQ 官方下载页 获取最新安装指南。

启动服务并开启管理插件

安装完成后,RabbitMQ 服务不会自动启动,需要手动操作。

sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server

检查服务状态:

sudo systemctl status rabbitmq-server

如果输出显示 active (running) 则表示启动成功。

接着,启用 Web 管理插件,这样可以通过浏览器查看队列、交换机等状态。

sudo rabbitmq-plugins enable rabbitmq_management

重启一次服务让插件生效:

sudo systemctl restart rabbitmq-server

现在,通过浏览器访问 http://你的服务器IP:15672 应该能看到登录页面。
默认用户名和密码均为 guest,但 guest 只能从 localhost 登录,所以我们需要创建一个远程可用的管理员账户。

创建用户并设置权限

由于安全限制,guest 用户不能在非本机使用,因此我们新建一个管理员账户。

sudo rabbitmqctl add_user admin 你的密码
sudo rabbitmqctl set_user_tags admin administrator
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
  • add_user 创建用户,密码请自行替换。
  • set_user_tags 赋予管理员角色标签。
  • set_permissions 赋予该用户对所有虚拟主机(/)的配置、写、读权限。

完成后,用新账户 admin 登录管理后台,确认可正常进入。

验证消息收发

最简单的方式是通过管理后台的 ExchangesQueues 标签页手动测试。

  1. 点击 QueuesAdd a new queue,输入队列名(如 test_queue),类型选择 Classic,确认创建。
  2. 点击该队列进入详情页,在 Publish message 区域输入消息内容,点击 Publish message
  3. Get messages 区域点击 Get message(s),选择 Ack modeAutomatic ack,点击 Get message(s),即可看到刚才发布的消息被成功消费。

如果消息能正常发布和接收,说明 RabbitMQ 消息队列已经跑起来了。

也可以使用命令行验证(在服务器本地执行):

# 发布一条消息
sudo rabbitmqadmin publish routing_key=test_queue payload="Hello from cli"

# 消费消息
sudo rabbitmqadmin get queue=test_queue ackmode=ack_requeue_false

避坑指南

  • 内存警告导致服务自动停止:RabbitMQ 默认有内存水位线(40% 物理内存),如果服务器内存不足,服务会阻塞并可能停止。调大内存或降低水位线:
  sudo rabbitmqctl set_vm_memory_high_watermark 0.6
  • 端口无法访问:检查防火墙(如 ufw、iptables)和安全组是否放行 5672 和 15672。在服务器本地用 curl http://127.0.0.1:15672 测试;如果通而外网不通,多半是防火墙问题。
  • guest 登录报错“user can only log in via localhost”:按教程新建管理员账户即可,不要尝试修改 guest 的权限。
  • 启动失败“erl_crash.dump”:通常是因为 Erlang 版本不匹配或磁盘空间不足。先 df -h 检查磁盘,再 dpkg -l | grep erlang 确认 Erlang 版本是否与 RabbitMQ 兼容。
  • 管理界面反应慢:如果服务器内存较小(<512MB),建议关闭不用的插件,或升级硬件。

常见问题 FAQ

Q:RabbitMQ 和 Kafka 有什么不同?
A:RabbitMQ 是通用消息队列,支持多种协议、复杂路由和优先级,适合异步解耦、任务分发;Kafka 更侧重高吞吐流式数据处理和日志聚合。新手从 RabbitMQ 入手更容易理解消息模型。

Q:安装完成后如何重启服务?
A:sudo systemctl restart rabbitmq-server。重启后管理插件和用户权限保持不变。

Q:如何查看 RabbitMQ 版本?
A:执行 sudo rabbitmqctl version 或登录管理后台在首页顶部查看。

Q:生产环境建议用什么方式部署?
A:推荐使用 Docker 或 Ansible 自动化部署,便于版本管理和快速扩容。单机测试可以按本文步骤操作。

总结

本文从零开始演示了 RabbitMQ 消息队列的安装、管理插件启用、用户权限设置以及消息收发验证,并整理了几个常见踩坑点。
如果你正在尝试搭建 RabbitMQ,可以先按照步骤完整执行一遍,再根据实际业务微调配置。
遇到异常时,优先检查服务和端口状态,大多数问题都能通过日志定位。

如果你的服务器环境与本文不同(如 CentOS、Docker),可以查看站内其他相关教程进行适配。

分享到:
上一篇
零基础搭建ClickHouse大数据分析平台
下一篇
Kafka高吞吐配置指南:三步提升消息处理能力
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意