RabbitMQ 入门与安装从 MQ 概念到环境搭建一、开篇学习 RabbitMQ 前需要准备什么RabbitMQ 属于消息中间件是 Java 后端开发中非常常见的一类基础组件。学习它之前最好已经具备以下基础具备一定 Java 基础掌握 Spring Boot 的基本使用了解 Linux 常见命令本地或服务器环境中准备好 JDK 17有一台 Linux 服务器Ubuntu 或 CentOS 都可以。从后端面试和实际项目角度看MQ 并不是一个孤立知识点。它经常和分布式系统、异步任务、削峰填谷、系统解耦、订单超时处理、消息可靠性等场景一起出现。因此学习 RabbitMQ 不只是为了会写几行收发消息的代码更重要的是理解为什么系统需要消息队列以及消息队列在架构中解决了什么问题。二、RabbitMQ 概述RabbitMQ 是一个实现了 AMQP 协议的消息队列服务也是目前主流的消息中间件之一。AMQP全称是 Advanced Message Queuing Protocol即高级消息队列协议。它是一个面向消息中间件设计的应用层协议目标是提供统一的消息传递规范。基于 AMQP客户端和消息中间件之间可以传递消息并且不强绑定具体开发语言或具体中间件实现。RabbitMQ 使用 Erlang 语言开发最初起源于金融系统领域用来在分布式系统中存储和转发消息。它后来逐渐走向开源和大众化在易用性、扩展性、可靠性、高可用性等方面都有比较成熟的表现。三、什么是 MQMQ 是 Message Queue 的缩写直译就是消息队列。从字面上理解它本质上是一个队列符合 FIFO也就是先进先出的特点。只不过队列里存放的不是普通数据结构里的元素而是一条条消息。消息可以很简单比如字符串、JSON也可以比较复杂比如包含业务对象、状态、事件类型等结构化内容。在分布式系统中系统之间的调用通常可以分成两类同步通信一个系统直接调用另一个系统的服务请求发出后需要等待对方处理并返回结果。比如 A 系统调用 B 系统接口B 系统返回结果后A 系统才能继续往下执行。异步通信一个系统把数据先发送到某个中间容器中另一个系统在合适的时机再从这个容器中取出并处理。MQ 就是这个“中间容器”的典型实现。RabbitMQ 就是 MQ 的一种具体实现。四、MQ 的核心作用MQ 的主要工作是接收消息、存储消息、转发消息。不同业务场景下它能发挥不同作用。可以把 MQ 想象成一个仓库。采购部门把零件放进仓库生产部门从仓库取出零件加工成产品。仓库存储和转交的是物品而 MQ 存储和转交的是消息。1. 异步解耦在业务流程中有些操作比较耗时但不一定需要立刻完成。例如用户注册成功后系统可能还需要发送短信、发送邮件、初始化积分账户等。如果所有操作都同步执行用户就必须等这些流程全部结束后才能看到“注册成功”。这会拉长响应时间也会让主流程依赖多个外部服务。引入 MQ 后注册服务可以先完成核心注册逻辑然后向 MQ 投递一条“用户已注册”的消息。短信服务、邮件服务再异步消费这条消息。这样主流程更轻系统之间的耦合也更低。2. 流量削峰秒杀、促销、抢购这类场景下短时间内可能涌入大量请求。如果后端服务直接承接所有流量很容易把数据库或业务服务打崩。使用 MQ 后请求可以先进入队列排队后端服务再按照自身处理能力逐步消费。这样可以把瞬时高峰变成相对平缓的处理过程降低系统被突发流量压垮的风险。3. 消息分发当多个系统都需要对同一件事情做出响应时MQ 可以充当消息分发中心。例如支付成功后订单系统需要修改订单状态积分系统需要增加积分库存系统需要扣减库存通知系统需要发送消息。如果支付系统直接调用这些系统就会越来越复杂。更好的方式是支付系统只向 MQ 投递一条“支付成功”消息其他系统订阅并处理自己关心的逻辑。4. 延迟通知有些业务需要在一段时间之后再执行。例如电商平台中用户下单后如果一定时间内没有支付系统需要自动取消订单。这个场景可以借助延迟消息或延迟队列实现下单时发送一条延迟消息到期后检查订单状态如果仍未支付就执行取消操作。五、为什么选择 RabbitMQ业界常见的 MQ 产品有 RabbitMQ、RocketMQ、Kafka、ActiveMQ、ZeroMQ 等也有一些场景会直接使用 Redis 充当轻量消息队列。这些产品没有绝对的好坏只有适不适合业务场景。KafkaKafka 最初主要面向日志收集和传输追求高吞吐量性能非常强单机吞吐量可以达到很高水平。它在日志采集、流式数据处理等领域非常成熟。如果核心需求是日志采集、大数据链路或高吞吐消息流Kafka 往往是优先选择。RocketMQRocketMQ 使用 Java 开发由阿里巴巴开源后来捐赠给 Apache。它借鉴了 Kafka 的设计并针对高可用、可靠性、稳定性做了很多增强经过大规模业务场景验证。如果系统对消息可靠性要求高同时并发量较大例如互联网金融、大型交易系统等RocketMQ 是很有竞争力的选择。RabbitMQRabbitMQ 使用 Erlang 开发功能比较完整支持几乎所有主流语言管理界面友好社区活跃度较高吞吐能力也能满足很多中小型业务系统。对于数据量不是极端庞大、并发不是特别夸张、又希望快速上手并使用成熟管理界面的项目来说RabbitMQ 是一个综合能力很强的选择。六、RabbitMQ 安装RabbitMQ 的安装方式有多种。课件中主要介绍了 Ubuntu 安装、CentOS 安装、Docker 安装以及一些常见服务操作。在安装 RabbitMQ 前要注意一个关键点RabbitMQ 依赖 Erlang 环境因此安装 RabbitMQ 前需要先安装 Erlang并且 Erlang 版本需要和 RabbitMQ 版本匹配。1. Ubuntu 环境安装Ubuntu 标准仓库中已经包含 RabbitMQ但仓库版本可能比 RabbitMQ 官方最新版本落后。学习阶段可以先使用 Ubuntu 仓库版本快速安装。安装 Erlangsudoapt-getupdatesudoapt-getinstallerlang查看 Erlang 是否安装成功erl进入 Erlang Shell 后可以使用下面命令退出halt().安装 RabbitMQsudoapt-getupdatesudoapt-getinstallrabbitmq-server systemctl status rabbitmq-server如果状态中显示active (running)说明 RabbitMQ 服务已经正常运行。启用管理界面RabbitMQ 默认不会开启 Web 管理界面需要手动启用插件rabbitmq-pluginsenablerabbitmq_management启用成功后默认管理端口是15672浏览器访问http://服务器IP:15672/需要注意云服务器要在安全组或防火墙中放行15672端口。RabbitMQ 从 3.3.0 开始限制guest/guest用户只能从 localhost 登录因此远程访问时建议创建新的管理员用户。添加管理员用户rabbitmqctl add_user admin admin rabbitmqctl set_user_tags admin administrator这里创建了用户名为admin、密码为admin的用户并授予administrator管理员角色。实际生产环境中不建议使用过于简单的密码。2. CentOS 环境安装CentOS 安装方式通常使用 rpm 包。安装前可以先确认系统版本cat/etc/redhat-release安装 Erlang可以从 RabbitMQ 官方推荐的 packagecloud 仓库下载 Erlang rpm 包。下载时要注意系统版本例如 el7 对应 CentOS 7el8 对应 CentOS 8。安装示例yum localinstall erlang-23.3.4.11-1.el7.x86_64.rpm安装完成后验证erl安装 RabbitMQ同样先下载匹配版本的 RabbitMQ Server rpm 包然后导入签名密钥并安装rpm--importhttps://www.rabbitmq.com/rabbitmq-release-signing-key.asc yum localinstall rabbitmq-server-3.8.30-1.el7.noarch.rpm启用管理界面并启动服务rabbitmq-pluginsenablerabbitmq_managementservicerabbitmq-server startservicerabbitmq-server status访问管理界面http://服务器IP:15672/同样建议创建管理员用户rabbitmqctl add_user admin admin rabbitmqctl set_user_tags admin administrator3. Docker 安装如果只是学习和本地测试Docker 是非常方便的方式。推荐直接使用带管理界面的镜像版本dockerpull rabbitmq:managementdockerrun-d-p5672:5672-p15672:15672--namerabbitmq rabbitmq:managementdockerps这里有两个重要端口5672RabbitMQ 客户端通信端口应用程序连接 RabbitMQ 时通常使用它15672RabbitMQ Web 管理界面端口。启动后访问http://服务器IP:15672/Docker 方式下可以进入容器内部创建管理员用户dockerexec-it容器ID /bin/bash rabbitmqctl add_user admin admin rabbitmqctl set_user_tags admin administrator七、常见服务操作Ubuntu 常用命令sudosystemctl start rabbitmq-serversudosystemctl stop rabbitmq-serversudosystemctl restart rabbitmq-serversudosystemctlenablerabbitmq-serversudosystemctl status rabbitmq-serverCentOS 常用命令servicerabbitmq-server startsudosystemctl stop rabbitmq-serverservicerabbitmq-server restartchkconfigrabbitmq-server on修改默认端口RabbitMQ 默认客户端端口是5672管理界面端口是15672。如果需要修改可以在/etc/rabbitmq/rabbitmq.conf中添加类似配置listeners.tcp.default8942 management.tcp.port8943然后重启 RabbitMQ 服务sudosystemctl restart rabbitmq-server或者在 CentOS 中sudoservicerabbitmq-server restart八、卸载 RabbitMQ如果需要重新安装可以先卸载旧版本。Ubuntu 卸载sudosystemctl stop rabbitmq-server dpkg-l|greprabbitmqsudoapt-getpurge --auto-remove rabbitmq-server dpkg-l|greperlangsudoapt-getpurge --auto-remove erlangCentOS 卸载servicerabbitmq-server stop yum list|greprabbitmq yum-yremove rabbitmq-server.noarchrm-rf/var/lib/rabbitmq/rm-rf/usr/local/rabbitmq yum list|greperlang yum-yremove erlang.x86_64卸载时要谨慎执行删除命令特别是/var/lib/rabbitmq/目录中可能包含 RabbitMQ 的持久化数据。九、小结RabbitMQ 的学习可以分成三步先理解 MQ 解决的问题异步解耦、流量削峰、消息分发、延迟通知再理解 RabbitMQ 的定位它是实现 AMQP 协议的成熟消息中间件功能完整、管理界面友好、社区成熟最后把环境跑起来先装 Erlang再装 RabbitMQ开启管理插件创建管理员用户并确认5672和15672两个端口可用。掌握这些内容后就可以继续学习 RabbitMQ 的核心模型例如生产者、消费者、交换机、队列、绑定关系、消息确认机制等。真正理解这些概念之后RabbitMQ 就不再只是一个“会安装的软件”而会变成分布式系统里非常实用的一块基础设施。
RabbitMQ 入门与安装
发布时间:2026/5/22 20:10:28
RabbitMQ 入门与安装从 MQ 概念到环境搭建一、开篇学习 RabbitMQ 前需要准备什么RabbitMQ 属于消息中间件是 Java 后端开发中非常常见的一类基础组件。学习它之前最好已经具备以下基础具备一定 Java 基础掌握 Spring Boot 的基本使用了解 Linux 常见命令本地或服务器环境中准备好 JDK 17有一台 Linux 服务器Ubuntu 或 CentOS 都可以。从后端面试和实际项目角度看MQ 并不是一个孤立知识点。它经常和分布式系统、异步任务、削峰填谷、系统解耦、订单超时处理、消息可靠性等场景一起出现。因此学习 RabbitMQ 不只是为了会写几行收发消息的代码更重要的是理解为什么系统需要消息队列以及消息队列在架构中解决了什么问题。二、RabbitMQ 概述RabbitMQ 是一个实现了 AMQP 协议的消息队列服务也是目前主流的消息中间件之一。AMQP全称是 Advanced Message Queuing Protocol即高级消息队列协议。它是一个面向消息中间件设计的应用层协议目标是提供统一的消息传递规范。基于 AMQP客户端和消息中间件之间可以传递消息并且不强绑定具体开发语言或具体中间件实现。RabbitMQ 使用 Erlang 语言开发最初起源于金融系统领域用来在分布式系统中存储和转发消息。它后来逐渐走向开源和大众化在易用性、扩展性、可靠性、高可用性等方面都有比较成熟的表现。三、什么是 MQMQ 是 Message Queue 的缩写直译就是消息队列。从字面上理解它本质上是一个队列符合 FIFO也就是先进先出的特点。只不过队列里存放的不是普通数据结构里的元素而是一条条消息。消息可以很简单比如字符串、JSON也可以比较复杂比如包含业务对象、状态、事件类型等结构化内容。在分布式系统中系统之间的调用通常可以分成两类同步通信一个系统直接调用另一个系统的服务请求发出后需要等待对方处理并返回结果。比如 A 系统调用 B 系统接口B 系统返回结果后A 系统才能继续往下执行。异步通信一个系统把数据先发送到某个中间容器中另一个系统在合适的时机再从这个容器中取出并处理。MQ 就是这个“中间容器”的典型实现。RabbitMQ 就是 MQ 的一种具体实现。四、MQ 的核心作用MQ 的主要工作是接收消息、存储消息、转发消息。不同业务场景下它能发挥不同作用。可以把 MQ 想象成一个仓库。采购部门把零件放进仓库生产部门从仓库取出零件加工成产品。仓库存储和转交的是物品而 MQ 存储和转交的是消息。1. 异步解耦在业务流程中有些操作比较耗时但不一定需要立刻完成。例如用户注册成功后系统可能还需要发送短信、发送邮件、初始化积分账户等。如果所有操作都同步执行用户就必须等这些流程全部结束后才能看到“注册成功”。这会拉长响应时间也会让主流程依赖多个外部服务。引入 MQ 后注册服务可以先完成核心注册逻辑然后向 MQ 投递一条“用户已注册”的消息。短信服务、邮件服务再异步消费这条消息。这样主流程更轻系统之间的耦合也更低。2. 流量削峰秒杀、促销、抢购这类场景下短时间内可能涌入大量请求。如果后端服务直接承接所有流量很容易把数据库或业务服务打崩。使用 MQ 后请求可以先进入队列排队后端服务再按照自身处理能力逐步消费。这样可以把瞬时高峰变成相对平缓的处理过程降低系统被突发流量压垮的风险。3. 消息分发当多个系统都需要对同一件事情做出响应时MQ 可以充当消息分发中心。例如支付成功后订单系统需要修改订单状态积分系统需要增加积分库存系统需要扣减库存通知系统需要发送消息。如果支付系统直接调用这些系统就会越来越复杂。更好的方式是支付系统只向 MQ 投递一条“支付成功”消息其他系统订阅并处理自己关心的逻辑。4. 延迟通知有些业务需要在一段时间之后再执行。例如电商平台中用户下单后如果一定时间内没有支付系统需要自动取消订单。这个场景可以借助延迟消息或延迟队列实现下单时发送一条延迟消息到期后检查订单状态如果仍未支付就执行取消操作。五、为什么选择 RabbitMQ业界常见的 MQ 产品有 RabbitMQ、RocketMQ、Kafka、ActiveMQ、ZeroMQ 等也有一些场景会直接使用 Redis 充当轻量消息队列。这些产品没有绝对的好坏只有适不适合业务场景。KafkaKafka 最初主要面向日志收集和传输追求高吞吐量性能非常强单机吞吐量可以达到很高水平。它在日志采集、流式数据处理等领域非常成熟。如果核心需求是日志采集、大数据链路或高吞吐消息流Kafka 往往是优先选择。RocketMQRocketMQ 使用 Java 开发由阿里巴巴开源后来捐赠给 Apache。它借鉴了 Kafka 的设计并针对高可用、可靠性、稳定性做了很多增强经过大规模业务场景验证。如果系统对消息可靠性要求高同时并发量较大例如互联网金融、大型交易系统等RocketMQ 是很有竞争力的选择。RabbitMQRabbitMQ 使用 Erlang 开发功能比较完整支持几乎所有主流语言管理界面友好社区活跃度较高吞吐能力也能满足很多中小型业务系统。对于数据量不是极端庞大、并发不是特别夸张、又希望快速上手并使用成熟管理界面的项目来说RabbitMQ 是一个综合能力很强的选择。六、RabbitMQ 安装RabbitMQ 的安装方式有多种。课件中主要介绍了 Ubuntu 安装、CentOS 安装、Docker 安装以及一些常见服务操作。在安装 RabbitMQ 前要注意一个关键点RabbitMQ 依赖 Erlang 环境因此安装 RabbitMQ 前需要先安装 Erlang并且 Erlang 版本需要和 RabbitMQ 版本匹配。1. Ubuntu 环境安装Ubuntu 标准仓库中已经包含 RabbitMQ但仓库版本可能比 RabbitMQ 官方最新版本落后。学习阶段可以先使用 Ubuntu 仓库版本快速安装。安装 Erlangsudoapt-getupdatesudoapt-getinstallerlang查看 Erlang 是否安装成功erl进入 Erlang Shell 后可以使用下面命令退出halt().安装 RabbitMQsudoapt-getupdatesudoapt-getinstallrabbitmq-server systemctl status rabbitmq-server如果状态中显示active (running)说明 RabbitMQ 服务已经正常运行。启用管理界面RabbitMQ 默认不会开启 Web 管理界面需要手动启用插件rabbitmq-pluginsenablerabbitmq_management启用成功后默认管理端口是15672浏览器访问http://服务器IP:15672/需要注意云服务器要在安全组或防火墙中放行15672端口。RabbitMQ 从 3.3.0 开始限制guest/guest用户只能从 localhost 登录因此远程访问时建议创建新的管理员用户。添加管理员用户rabbitmqctl add_user admin admin rabbitmqctl set_user_tags admin administrator这里创建了用户名为admin、密码为admin的用户并授予administrator管理员角色。实际生产环境中不建议使用过于简单的密码。2. CentOS 环境安装CentOS 安装方式通常使用 rpm 包。安装前可以先确认系统版本cat/etc/redhat-release安装 Erlang可以从 RabbitMQ 官方推荐的 packagecloud 仓库下载 Erlang rpm 包。下载时要注意系统版本例如 el7 对应 CentOS 7el8 对应 CentOS 8。安装示例yum localinstall erlang-23.3.4.11-1.el7.x86_64.rpm安装完成后验证erl安装 RabbitMQ同样先下载匹配版本的 RabbitMQ Server rpm 包然后导入签名密钥并安装rpm--importhttps://www.rabbitmq.com/rabbitmq-release-signing-key.asc yum localinstall rabbitmq-server-3.8.30-1.el7.noarch.rpm启用管理界面并启动服务rabbitmq-pluginsenablerabbitmq_managementservicerabbitmq-server startservicerabbitmq-server status访问管理界面http://服务器IP:15672/同样建议创建管理员用户rabbitmqctl add_user admin admin rabbitmqctl set_user_tags admin administrator3. Docker 安装如果只是学习和本地测试Docker 是非常方便的方式。推荐直接使用带管理界面的镜像版本dockerpull rabbitmq:managementdockerrun-d-p5672:5672-p15672:15672--namerabbitmq rabbitmq:managementdockerps这里有两个重要端口5672RabbitMQ 客户端通信端口应用程序连接 RabbitMQ 时通常使用它15672RabbitMQ Web 管理界面端口。启动后访问http://服务器IP:15672/Docker 方式下可以进入容器内部创建管理员用户dockerexec-it容器ID /bin/bash rabbitmqctl add_user admin admin rabbitmqctl set_user_tags admin administrator七、常见服务操作Ubuntu 常用命令sudosystemctl start rabbitmq-serversudosystemctl stop rabbitmq-serversudosystemctl restart rabbitmq-serversudosystemctlenablerabbitmq-serversudosystemctl status rabbitmq-serverCentOS 常用命令servicerabbitmq-server startsudosystemctl stop rabbitmq-serverservicerabbitmq-server restartchkconfigrabbitmq-server on修改默认端口RabbitMQ 默认客户端端口是5672管理界面端口是15672。如果需要修改可以在/etc/rabbitmq/rabbitmq.conf中添加类似配置listeners.tcp.default8942 management.tcp.port8943然后重启 RabbitMQ 服务sudosystemctl restart rabbitmq-server或者在 CentOS 中sudoservicerabbitmq-server restart八、卸载 RabbitMQ如果需要重新安装可以先卸载旧版本。Ubuntu 卸载sudosystemctl stop rabbitmq-server dpkg-l|greprabbitmqsudoapt-getpurge --auto-remove rabbitmq-server dpkg-l|greperlangsudoapt-getpurge --auto-remove erlangCentOS 卸载servicerabbitmq-server stop yum list|greprabbitmq yum-yremove rabbitmq-server.noarchrm-rf/var/lib/rabbitmq/rm-rf/usr/local/rabbitmq yum list|greperlang yum-yremove erlang.x86_64卸载时要谨慎执行删除命令特别是/var/lib/rabbitmq/目录中可能包含 RabbitMQ 的持久化数据。九、小结RabbitMQ 的学习可以分成三步先理解 MQ 解决的问题异步解耦、流量削峰、消息分发、延迟通知再理解 RabbitMQ 的定位它是实现 AMQP 协议的成熟消息中间件功能完整、管理界面友好、社区成熟最后把环境跑起来先装 Erlang再装 RabbitMQ开启管理插件创建管理员用户并确认5672和15672两个端口可用。掌握这些内容后就可以继续学习 RabbitMQ 的核心模型例如生产者、消费者、交换机、队列、绑定关系、消息确认机制等。真正理解这些概念之后RabbitMQ 就不再只是一个“会安装的软件”而会变成分布式系统里非常实用的一块基础设施。