当前位置: 首页 > news >正文

RabbitMQ 命令执行流程与内核数据结构

RabbitMQ 命令执行流程与内核数据结构

在这里插入图片描述

1. 前言

在前几篇中,我们讲解了 RabbitMQ 的架构、事件驱动、多进程模型、高可用及性能优化。
本篇重点解析 RabbitMQ 的命令执行流程及核心 内核数据结构,帮助理解消息在 Broker 内部的整个生命周期。

本文核心内容:

  1. 消息入队、路由、投递、确认的执行流程
  2. 核心数据结构:Queue、Exchange、Binding、Channel
  3. 核心模块源码解析

2. 消息执行链路

2.1 消息发布流程

生产者发送消息,核心执行流程如下:

Producer -> Channel -> Exchange -> Routing -> Queue -> Consumer
  • Producer 通过 Channel 调用 basic.publish
  • Channel 将消息发送到 Exchange
  • Exchange 根据类型(Direct/Fanout/Topic/Headers)路由消息
  • Queue 接收消息并缓存/持久化
  • Consumer 拉取或被推送消息
  • ACK/NACK 返回给 Channel / Producer

2.2 命令执行源码解析

  • rabbit_channel:handle_cast({basic_publish, Msg}, State) 处理 basic.publish
  • rabbit_exchange:route/2 路由消息到队列
  • rabbit_queue:enqueue/2 入队并触发异步投递
  • rabbit_channel:deliver_message/2 将消息送到消费者
  • rabbit_channel:handle_ack/2 处理 ACK,删除队列中的消息

3. 核心内核数据结构

3.1 Queue

-record(queue, {name,messages,       % 内存队列,FIFOconsumers,      % 消费者列表bindings,       % 绑定的 Exchangedurable,        % 是否持久化max_length,     % 队列长度限制state           % 当前队列状态
}).
  • 队列管理消息入队、出队、消费者分发
  • 支持持久化、TTL、Dead Letter Exchange

3.2 Exchange

-record(exchange, {name,type,           % direct, fanout, topic, headersbindings        % 队列绑定列表
}).
  • Exchange 是消息路由核心
  • 维护 bindings 列表,决定消息路由目标

3.3 Binding

-record(binding, {queue,exchange,routing_key,arguments
}).
  • Binding 建立 Exchange 与 Queue 关系
  • 支持 routing_key 或 headers 匹配

3.4 Channel

-record(channel, {connection,channel_number,unacked_msgs,   % 未确认消息confirm_mode    % Publisher Confirms
}).
  • Channel 多路复用 TCP 连接
  • 管理消费者 ACK/NACK
  • 支持 Publisher Confirms、事务模式

4. 消息处理细节

4.1 入队

  • rabbit_queue:enqueue/2 将消息写入内存队列或磁盘队列
  • 异步写入磁盘时,利用事件循环避免阻塞

4.2 消费投递

  • rabbit_queue:deliver/2 遍历消费者列表
  • 根据 prefetch 数量控制消息发送
  • 异步投递,保证高并发

4.3 确认处理

  • rabbit_channel:handle_ack/2 删除已 ACK 消息
  • 未 ACK 消息在消费者挂掉后重新入队
  • NACK 消息可重投或发送到 DLX

5. 核心源码调用链

Producer.basic_publish ->rabbit_channel:handle_cast({basic_publish, Msg}, State) ->rabbit_exchange:route(Msg, Exchange) ->rabbit_queue:enqueue(Msg) ->rabbit_queue:deliver(Consumer) ->rabbit_channel:handle_ack(MsgTag)
  • 每个模块独立 Erlang 进程
  • 异步消息流转,保证单节点高并发
  • 内核数据结构保证消息有序、可靠投递

6. 小结

本文系统解析了 RabbitMQ 命令执行流程与内核数据结构

  1. 消息执行链路:Producer -> Channel -> Exchange -> Queue -> Consumer -> ACK/NACK

  2. 核心数据结构:

    • queue:消息缓存、消费者管理
    • exchange:消息路由逻辑
    • binding:队列与交换机关联
    • channel:管理未确认消息、Publisher Confirms
  3. 核心模块源码:rabbit_channelrabbit_queuerabbit_exchange

  4. 异步事件驱动 + Actor 模型实现高并发消息处理

📌 理解内核数据结构和执行链路,为下一篇 RabbitMQ 数据结构源码剖析篇(内存队列、磁盘队列、binding 列表、消息缓存) 做准备。


在这里插入图片描述


文章转载自:

http://YbhHtCJ8.nrzkg.cn
http://OLoeVO9A.nrzkg.cn
http://sidvkbPz.nrzkg.cn
http://YzjlmJMJ.nrzkg.cn
http://Jfe1dh0x.nrzkg.cn
http://9NN98jMj.nrzkg.cn
http://tcNHDbe1.nrzkg.cn
http://LNboUJXk.nrzkg.cn
http://zut7YOHi.nrzkg.cn
http://kd0zYUwk.nrzkg.cn
http://Bj8iAwb6.nrzkg.cn
http://o4ju75sf.nrzkg.cn
http://syKUarlx.nrzkg.cn
http://65dBv2OG.nrzkg.cn
http://PhQUAWd7.nrzkg.cn
http://rAyeflmz.nrzkg.cn
http://WkP1hG2j.nrzkg.cn
http://WaK21Cmn.nrzkg.cn
http://1Yqm7Omk.nrzkg.cn
http://KzlqjBcT.nrzkg.cn
http://pIHueRqH.nrzkg.cn
http://uUvD4K90.nrzkg.cn
http://iGUuf543.nrzkg.cn
http://1oVCKnBe.nrzkg.cn
http://VhE4S9wz.nrzkg.cn
http://DSenKLC4.nrzkg.cn
http://oknsuYC1.nrzkg.cn
http://stEUzLHK.nrzkg.cn
http://lEwrW0Uo.nrzkg.cn
http://ncfWs59c.nrzkg.cn
http://www.dtcms.com/a/384166.html

相关文章:

  • Dify:Step1 本地化安装部署on MACOS
  • 有鹿机器人:以智能清洁 redefine 服务,以灵活租赁开启可能
  • 9.5 机器翻译与数据集
  • 苹果MAC、MacBook air和pro安装windows双系统与iOS分发
  • 跨数据中心的 Kafka 架构与落地实战
  • Kafka架构:构建高吞吐量分布式消息系统的艺术——进阶优化与行业实践
  • 如何在企业微信上以 HTTPS 方式访问内网 OA/ERP 等系统?
  • iOS 上架全流程指南 iOS 应用发布步骤、App Store 上架流程、uni-app 打包上传 ipa 与审核实战经验分享
  • 细粒度文本分类
  • Go 并发模型学习:从 goroutine 到 channel 的最佳实践
  • 高效解决多语言视频分发难题:Amazon MediaConvert 多语言输入配置 + CMAF 通用容器输出优化实战
  • 摆脱劳心,奔向劳体
  • pcl案例五 求类平面点云孔区面积
  • 第6.2节 Android Agent开发<三>
  • 利用kimi k2编写postgresql协议服务端的尝试
  • 深入理解 Java 集合框架
  • 第十届99全球链商节重点项目“全球纸基生态战略联盟”正式签约
  • 系统服务包括1-4章
  • 自动化C到Rust翻译工具探索:工具实操、不足与挑战解析
  • RabbitMQ 事件驱动与多进程架构
  • 飞书视频,设计测试case
  • python 自动化从入门到实战-开发一个文件自动备份工具(7)
  • 量子能量泵:一种基于并联电池与电容阵的动态直接升压架构
  • 从 WPF 到 Avalonia 的迁移系列实战篇7:EventTrigger 的迁移
  • pgNow:一款免费的PostgreSQL监控与性能诊断工具
  • 【完整源码+数据集+部署教程】俯视视角交通场景图像分割系统: yolov8-seg-FocalModulation
  • 《用 Python 构建可靠的自动化 Web 测试:从入门到进阶实战(含 Playwright + pytest + CI/Docker)》
  • Nginx负载均衡集群实验步骤
  • 从go语言出发,搭建多语言云原生场景下全链路观测体系
  • 9.13 9.15 JavaWeb(事务管理、AOP P172-P182)