一条消息的旅程:RabbitMQ 学习与实践(一)

专栏:RabbitMQ 进阶之路

个人主页:手握风云

目录

[一、RabbitMQ 基础概念](#一、RabbitMQ 基础概念)

[1.1. 定义](#1.1. 定义)

[1.2. AMQP 协议](#1.2. AMQP 协议)

[1.3. MQ 本质](#1.3. MQ 本质)

[1.4. 分布式系统两种通信方式](#1.4. 分布式系统两种通信方式)

[二、MQ 的核心作用与应用场景](#二、MQ 的核心作用与应用场景)

[三、主流 MQ 产品对比](#三、主流 MQ 产品对比)

[3.1. Kafka](#3.1. Kafka)

[3.2. RocketMQ](#3.2. RocketMQ)

[3.3. RabbitMQ](#3.3. RabbitMQ)

[四、RabbitMQ 的安装](#四、RabbitMQ 的安装)


一、RabbitMQ 基础概念

1.1. 定义

Rabbit 是企业名称,MQ 全称Message Queue(消息队列);RabbitMQ是 Rabbit 公司推出、实现了 AMQP 协议的主流消息中间件。

1.2. AMQP 协议

全称高级消息队列协议,是面向消息中间件的通用应用层协议,作用是让不同客户端、消息中间件之间可跨语言自由传递消息,不受开发环境限制。

1.3. MQ 本质

MQ 的底层是 FIFO(先入先出) 的普通队列,队列内存储各类消息(文本、JSON、对象等),核心用途是实现分布式系统之间的通信。

1.4. 分布式系统两种通信方式

  1. 同步通信:系统之间直接调用接口,数据发出后即时送达目标端。
  2. 异步通信:数据先存入 MQ 这类临时容器,满足指定条件后,再由容器转发至目标系统。

二、MQ 的核心作用与应用场景

我们可以将 MQ 类比为 "消息仓库",负责消息的存储与转发,主要有四大实用能力:

  1. 异步解耦:把耗时、无需即时返回结果的业务操作异步化,剥离主流程。比如用户注册成功后,异步发送短信、邮件通知,无需等待通知发送完成再反馈结果。
  2. 流量削峰:应对秒杀、大促等突发高流量,将请求排队缓冲,系统按自身能力逐步处理,避免突发流量压垮服务,同时无需为峰值流量额外投入大量资源。
  3. 消息分发:当多个系统需要响应同一份数据时,由 MQ 统一分发消息,替代低效的数据库轮询。比如支付成功后,支付系统向 MQ 发消息,其他业务系统订阅并处理。
  4. 延迟通知:依托延迟消息功能实现定时任务。比如电商用户下单后,超时未支付则自动取消订单。

三、主流 MQ 产品对比

3.1. Kafka

Kafka 最初专为日志收集、传输设计,特点是极致高吞吐,单机可达十万级,功能精简,如果是日志采集类场景,首选 Kafka。

3.2. RocketMQ

RocketMQ 是阿里开源,后捐赠给 Apache,采用 Java 语言开发,设计时借鉴 Kafka 并做优化,经过多年双十一高并发场景验证,可靠性、稳定性表现突出。但是支持客户端语言较少,社区活跃度一般。适用于互联网金融等高并发、高可靠性要求的场景。

3.3. RabbitMQ

RabbitMQ 采用 Erlang 语言开发,功能完备,兼容几乎所有主流开发语言,自带友好可视化管理界面,吞吐量为万级,社区活跃度高,适用于中小型企业、中低并发、数据量适中的业务场景。

RabbitMQ 在易用性、扩展性、可靠性、高可用性四大方面表现优异,目前已在互联网行业实现大规模落地应用。

四、RabbitMQ 的安装

RabbitMQ 运行强依赖 Erlang 语言环境,安装前必须先部署 Erlang,且两者版本需严格匹配。我们首先查看系统版本。

bash 复制代码
cat /etc/redhat-release

rabbitmq/erlang - Packages · packagecloud 下载对应版本的 Erlang 包,比如 CentOS 7 对应 Erlang 7,CentOS 8 对应 Erlang 8。

bash 复制代码
wget 对应的 Erlang RPM 包的地址
sudo yum install 对应的 Erlang 版本

输入 erl 确认是否安装成功,输入 halt(). 即可退出,或者简单一点使用 ctrl + c。

接着我们需要从 Erlang Version Requirements | RabbitMQ 确认自己需要安装的 RabbitMQ 的客户端版本。

RabbitMQ 客户端安装:rabbitmq/rabbitmq-server - Packages · packagecloud

bash 复制代码
# 导入官方签名密钥
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
sudo yum install RabbitMQ 客户端版本

安装好之后,查看运行状态:

bash 复制代码
# 启动服务
systemctl start rabbitmq-server
# 开机自启
systemctl enable rabbitmq-server

由于 RabbitMQ 默认是不安装管理界面的,所以我们需要执行插件启用命令:

bash 复制代码
rabbitmq-plugins enable rabbitmq_management

开启管理面板之后,就可以通过 http://服务器IP:15672 进行访问。

bash 复制代码
# 创建用户
rabbitmqctl add_user admin admin

RabbitMQ 六大用户角色权限:

角色 权限说明
Administrator 超级管理员 登录控制台、查看所有信息、管理用户 / 策略、查看节点详情
Monitoring 监控者 登录控制台、查看节点内存 / 磁盘 / 进程等监控信息,无法管理策略
Policymaker 策略制定者 登录控制台、管理策略,无法查看节点信息
Management 普通管理者 仅可登录控制台,无节点查看、策略管理权限
Impersonator 模拟者 无法登录 Web 管理控制台
None 普通用户 仅做生产者 / 消费者,无法登录控制台
相关推荐
憧憬成为java架构高手的小白1 天前
黑马八股--中间件学习之MQ(RabbitMQ)
学习·中间件
稚南城才子,乌衣巷风流2 天前
RabbitMQ 消息队列:从入门到实战
分布式·rabbitmq
weixin_727535623 天前
MinIO大文件上传深度拆解:从原理到生产落地的完整指南
java·中间件
过期动态3 天前
【LeetCode 热题 100】找到字符串中所有字母异位词
java·数据结构·算法·leetcode·职场和发展·rabbitmq
jieyucx3 天前
Nuxt4阶段六:工程化与进阶 —— 模块、中间件、插件、TS 与测试
中间件·vue·web·nuxt·全栈·ssr
YDS8295 天前
大营销平台 —— 活动SKU库存扣减业务及其一致性处理
java·spring boot·redis·rabbitmq·ddd
霸道流氓气质5 天前
Kiro 中配置 RabbitMQ MCP Server 指南
分布式·rabbitmq·ruby
索西引擎5 天前
【React】Redux 中间件机制:副作用处理与数据流增强的形式化分析
前端·react.js·中间件
糖果店的幽灵5 天前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
quweiie5 天前
tp8使用rabbitMQ消息队列的示例
消息队列·rabbitmq·thinkphp消息队列