RabbitMQ01-基础-入门

文章目录

RabbitMQ01-基础-入门

1、概念

(1)概念
(2)核心功能
  • 持久化:消息和队列可持久化到磁盘,防止服务器重启丢失数据。
  • ACK 确认机制:生产者确认(确保消息投递)和消费者确认(处理完成后删除消息)。
  • 死信队列(DLX):处理失败或超时消息,便于重试或分析。
  • 高可用性:支持集群部署和镜像队列,部分节点故障时仍可提供服务。
  • 灵活扩展:插件体系支持功能扩展(如管理界面、协议适配)。
(3)应用场景
  • 异步处理:例如电商下单后,订单服务异步通知库存、物流系统,避免同步阻塞。
  • 流量削峰:高并发场景下缓冲请求,防止系统过载。
  • 应用解耦:微服务间通过消息传递降低依赖,提升系统容错性。
  • 日志处理与实时数据:集中收集日志或传感器数据,供多个消费者并行处理。
(4)技术特点
  • 开发语言:基于 Erlang 实现,具备高并发和低延迟特性。
  • 协议支持:兼容 AMQP、STOMP、MQTT 等协议。
  • 多语言客户端:支持 Java、Python、Go 等主流语言。

2、发展历史

(1)起源与诞生
  • 2006年:AMQP(Advanced Message Queuing Protocol,高级消息队列协议)由 Cisco、Red Hat、iMatix 等公司联合发起制定,旨在为异步消息通信建立一个开放、标准化的协议。
  • 2007年 :RabbitMQ 由英国的 Rabbit Technologies Ltd 首次发布,作为 AMQP 协议的一个开源实现,使用 Erlang 语言开发,充分利用了 Erlang 在高并发、分布式系统方面的优势。
(2)被 VMware 收购
  • 2010年4月 :Rabbit Technologies 被 SpringSource(VMware 旗下的部门)收购,RabbitMQ 开始获得更强大的商业支持和资源投入。
  • 同年,RabbitMQ 正式开源,并迅速在开发者社区中流行起来。
(3)并入 Pivotal
  • 2013年5月 :VMware 将包括 RabbitMQ 在内的多个项目整合进新成立的 Pivotal Software(由 VMware、EMC 和通用电气共同组建)。
  • 此后,RabbitMQ 成为 Pivotal 重要的中间件产品之一,持续更新并增强企业级功能(如集群、镜像队列、管理插件等)。
(4)功能演进与成熟
  • 2015年前后 :RabbitMQ 进入高可用性和可扩展性增强期,引入了:
    • 镜像队列(Mirrored Queues)
    • 集群管理机制
    • 丰富的插件系统(如管理界面 rabbitmq_management、MQTT/STOMP 协议支持等)
  • 持续支持多语言客户端:提供 Java、Python、.NET、Go、Node.js 等 SDK,广泛应用于微服务、事件驱动架构和任务队列场景。
  • 协议支持扩展:除原生 AMQP 0-9-1 外,还通过插件支持 MQTT、STOMP、HTTP 等协议。
(5)当前状态
  • RabbitMQ 依然是最流行的开源消息代理之一,尤其在需要强可靠性、灵活路由和成熟生态的场景中广泛应用。
  • VMware(现属 Broadcom) 继续维护和支持(注:2023 年 VMware 被 Broadcom 收购,但 RabbitMQ 项目仍在活跃开发中)。

3、版本演进

(1)版本历史
版本系列 首次发布时间 主要特性 / 改进 维护状态(截至 2025 年)
1.x 2007 年 基于 AMQP 0-8 的初始开源实现;Erlang 编写;基础队列、交换器模型 已废弃
2.x ~2009--2011 支持 AMQP 0-9-1;引入管理插件雏形;改进集群支持 已废弃
3.0 2012 年底 全面重构架构;引入全新管理 UI;支持镜像队列(Mirrored Queues) 已废弃
3.1 -- 3.6 2013--2016 插件系统成熟;支持 TLS/SSL;权限控制增强;性能优化 已停止维护
3.7 2017 年 11 月 引入 Quorum Queues(实验性);改进 CLI 工具;支持 Erlang/OTP 20+ 2020 年 9 月终止支持
3.8 2019 年 10 月 正式支持 Quorum Queues(高可用队列);弃用经典镜像队列(逐步迁移);支持 Erlang 21--23;增强监控指标 2022 年 7 月终止社区支持 (商业支持可能延续)
3.9 2021 年 7 月 改进流控机制;增强 Prometheus 指标;优化内存使用;支持 Erlang 24 2023 年 1 月终止支持
3.10 2022 年 5 月 最后一个"经典"主版本;稳定版广泛用于生产环境(尤其在 CentOS 7 等旧系统);支持 Erlang 23.3 2023 年 7 月终止支持
3.11 -- 3.13 2022--2023 过渡版本;为 4.0 做准备;移除部分旧 API;增强安全性和可观测性 已被 4.0 取代
4.0.x 2024 年底 首发 首个长期支持(LTS)4.x 版本 • 全新流式队列(Stream)成为核心功能 • 更强的横向扩展能力 • 性能显著提升(吞吐量 +30%+) • 默认启用更安全的配置 • 改进插件加载机制 • 官方仅对 4.0.x 提供社区支持 ** 当前最新 LTS 版本(截至 2025 年 11 月)**
(2)官方支持策略
  • RabbitMQ 官方宣布,仅最新主版本的最新次版本系列(如 4.0.x)提供社区支持,包括安全补丁和关键 bug 修复。旧版本(如 3.13 及以下)不再接收更新。
(3)关键技术演进亮点
  • AMQP 协议 :始终基于 AMQP 0-9-1(未迁移到 AMQP 1.0),但通过插件支持 MQTT、STOMP、HTTP 等。
  • 队列模型演进
    • Classic Queue (经典队列)→ Mirrored Queue (镜像队列,3.x)→ Quorum Queue (3.8 引入,基于 Raft)→ Stream(3.9 实验,4.0 成为核心)
  • 运维体验
    • 管理插件(rabbitmq_management)从可选变为标配
    • 集成 Prometheus + Grafana 监控
    • rabbitmqctl 和 HTTP API 功能持续增强
(4)版本选择建议
场景 推荐版本
新项目、长期维护 RabbitMQ 4.0.x (LTS)
老系统升级过渡 3.11 → 3.13 → 4.0(需测试兼容性)
仍在使用 CentOS 7 / Erlang 23 可临时使用 3.10(但已无安全更新,不推荐)
  • 注意:RabbitMQ 对 Erlang/OTP 版本有严格依赖 ,例如:
    • RabbitMQ 3.10 → Erlang 23.3
    • RabbitMQ 3.11--3.13 → Erlang 24--25
    • RabbitMQ 4.0 → Erlang 26+

4、体系架构

(1)消息模型
  • 生产者(Producer):发送消息到交换机的应用程序。
  • 交换机(Exchange):接收消息并根据路由规则分发到队列,支持四种类型:
    • Direct:精确匹配路由键。
    • Fanout:广播消息至所有绑定队列。
    • Topic:通过通配符(*#)匹配路由键,支持灵活路由。
    • Headers:基于消息头键值对匹配。
  • 队列(Queue):存储消息的缓冲区,消费者从中获取消息。
  • 消费者(Consumer):处理队列中的消息。
(2)通信机制
  • 连接(Connection):TCP 长连接,支持多线程通信。
  • 信道(Channel):虚拟连接,减少 TCP 开销,隔离不同操作。
(3)其他模型
  • Broker:接收和分发消息的应用,RabbitMQ Server 就是 Message Broker
  • Virtual host:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个 vhost,每个用户在自己的 vhost 创建 exchange/queue 等
  • Connection:publisher/consumer 和 broker 之间的 TCP 连接
  • Channel:如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection 的开销将是巨大的,效率也较低。Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个 thread 创建单独的 channel 进行通讯,AMQP method 包含了 channel id 帮助客 户端和 message broker 识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销
  • Exchange:message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发 消息到 queue 中去。常用的类型有:direct (point-to-point),topic (publish-subscribe) and fanout (multicast)
  • Queue:消息最终被送到这里等待 consumer 取走
  • Binding:exchange 和 queue 之间的虚拟连接,binding 中可以包含 routing key,Binding 信息被保 存到 exchange 中的查询表中,用于 message 的分发依据
相关推荐
源代码•宸20 小时前
goframe框架签到系统项目开发(每日签到添加积分和积分记录、获取当月最大连续签到天数、发放连续签到奖励积分、实现签到日历详情接口)
数据库·经验分享·redis·中间件·golang·dao·goframe
眠りたいです2 天前
Docker:Docker Volume存储卷-宿主机与容器的数据双向交流通道
运维·docker·中间件·容器
掘根2 天前
【消息队列项目】客户端搭建与测试
运维·服务器·中间件
yuanmenghao3 天前
自动驾驶中间件iceoryx 构建指南
中间件·自动驾驶·软件构建·iceoryx
smileNicky4 天前
2025 技术创作与实战:深耕数据库、中间件与 AI 应用的进阶之路
数据库·人工智能·中间件
yuanmenghao4 天前
自动驾驶中间件iceoryx-介绍
人工智能·中间件·自动驾驶
Kiyra5 天前
八股篇(1):LocalThread、CAS和AQS
java·开发语言·spring boot·后端·中间件·性能优化·rocketmq
Kiyra5 天前
Spring Boot Starter 自定义开发:封装中间件配置
spring boot·redis·后端·缓存·中间件·性能优化·rocketmq
笙枫5 天前
Agent 进阶设计:状态管理、中间件与多Agent协作
java·服务器·python·ai·中间件