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

RabbitMQ 消息路由与交换机机制

RabbitMQ 消息路由与交换机机制

在这里插入图片描述

1. 前言

RabbitMQ 的核心功能之一就是 消息路由
Exchange(交换机)负责将生产者发送的消息投递到一个或多个队列,而路由规则决定了消息的流向。

本文将详细分析:

  1. Exchange 类型及路由策略
  2. Binding 与 Routing Key 关系
  3. 消息投递流程源码解析
  4. 消息可靠性与顺序保证

2. Exchange 类型

2.1 Direct Exchange

  • 路由规则:完全匹配 Routing Key
  • 应用场景:精确路由,例如不同队列处理不同类型消息
Exchange(direct)|+-- queue1 (routing_key = "task_A")+-- queue2 (routing_key = "task_B")

2.2 Fanout Exchange

  • 路由规则:忽略 Routing Key,广播到所有绑定队列
  • 应用场景:发布/订阅模式,如消息广播
Exchange(fanout)|+-- queue1+-- queue2+-- queue3

2.3 Topic Exchange

  • 路由规则:支持通配符匹配

    • * 匹配一个单词
    • # 匹配零个或多个单词
  • 应用场景:复杂路由,如日志分级

Exchange(topic)routing_key = "logs.error"Binding queue1: "logs.*"Binding queue2: "logs.#"

2.4 Headers Exchange

  • 路由规则:匹配消息头(Headers)而非 Routing Key
  • 应用场景:基于属性的消息路由

3. Binding 与 Routing Key

3.1 Binding 概念

  • Binding 是 队列与交换机的关系映射
  • 绑定时指定 routing key 或 headers
  • 支持一个 Exchange 绑定多个 Queue

3.2 源码实现

  • rabbit_binding 模块管理 binding
  • Exchange 内部维护 bindings 列表,消息发布时遍历匹配
route(Exchange, Msg) ->Queues = [Q || B <- Exchange#exchange.bindings,matches(B, Msg),Q = B#binding.queue],Queues.
  • matches/2 根据 Exchange 类型进行匹配逻辑:

    • direct → exact match
    • fanout → all queues
    • topic → wildcard match
    • headers → header map match

4. 消息投递流程

4.1 生产者发送消息

basic.publish --> rabbit_exchange:route --> rabbit_queue:enqueue

4.2 路由处理

  1. Exchange 接收消息
  2. 根据类型和 Binding 规则选择目标队列
  3. 调用 queue:enqueue 将消息入队

4.3 消费者拉取消息

  • 消费者通过 Channel 拉取消息
  • Broker 推送消息到消费者或消费者主动拉取
  • 消息 ACK/NACK 确保可靠性

5. 消息可靠性与顺序保证

5.1 消息持久化

  • 队列持久化 + 消息持久化(persistent = true)
  • 消息写入磁盘 Journal 确保故障恢复

5.2 顺序保证

  • 同一个队列内消息 FIFO
  • 绑定到多个队列时,不同队列可能并行消费,顺序只保证单队列

5.3 ACK 与重投

  • 消费者处理完成发送 ACK
  • Broker 删除消息
  • 消费者掉线或 nack → 消息重新入队

6. 核心源码剖析

6.1 rabbit_exchange 模块

  • route/2:路由消息
  • register_binding/3:创建 binding
  • unbind/2:解绑队列

6.2 rabbit_queue 模块

  • enqueue/2:消息入队
  • deliver/2:投递到消费者
  • confirm:消息确认删除

6.3 投递优化

  • Erlang Actor 模型,Queue 进程独立处理消息
  • 异步处理保证高并发
  • 内存队列 + 持久化 Journal 提升吞吐量

7. 小结

本文系统解析了 RabbitMQ 消息路由与交换机机制:

  1. Exchange 类型:Direct、Fanout、Topic、Headers
  2. Binding 机制:队列与交换机关联,支持路由键或 Headers
  3. 消息投递流程:生产者 → Exchange → Queue → 消费者
  4. 可靠性保障:消息持久化、ACK/NACK、顺序保证
  5. 源码解析rabbit_exchangerabbit_bindingrabbit_queue 投递逻辑

📌 理解消息路由机制,为下一步 高可用集群与 Mirrored Queue 源码解析打下基础。


在这里插入图片描述


文章转载自:

http://p9J85ENK.ysLfn.cn
http://MSAE4zTW.ysLfn.cn
http://gkH8CaT8.ysLfn.cn
http://946VYUfI.ysLfn.cn
http://OWlg01WE.ysLfn.cn
http://uta1CbDD.ysLfn.cn
http://gXAnLuyD.ysLfn.cn
http://nZ62oCgU.ysLfn.cn
http://593UkDDH.ysLfn.cn
http://Lx1Ht3Kd.ysLfn.cn
http://yZTqtZNj.ysLfn.cn
http://hk3CrZdB.ysLfn.cn
http://6QGYS5kv.ysLfn.cn
http://IedPyLTZ.ysLfn.cn
http://hshefI7m.ysLfn.cn
http://rPwxiB4v.ysLfn.cn
http://AcWtINt9.ysLfn.cn
http://ttnpfdug.ysLfn.cn
http://RJZLNz9d.ysLfn.cn
http://4GRUmKwh.ysLfn.cn
http://TdZkekI3.ysLfn.cn
http://ue4jqOIH.ysLfn.cn
http://drXTybjT.ysLfn.cn
http://HUlLAt3E.ysLfn.cn
http://XjPepZvT.ysLfn.cn
http://h0PiCkjt.ysLfn.cn
http://XeFax07s.ysLfn.cn
http://K2ERfbDw.ysLfn.cn
http://YY4Jkqhq.ysLfn.cn
http://2SVV24q6.ysLfn.cn
http://www.dtcms.com/a/384867.html

相关文章:

  • 月视图,周视图,日视图
  • RabbitMQ 数据结构源码剖析
  • Redis 内存优化与管理机制(内存碎片、LRU、惰性删除、内存回收策略)
  • 嵌入式学习day49-硬件-UART
  • 通信模组性能调优
  • Redis 实战指南:数据库选型 + 高可用(主从 / 哨兵)+ 集群搭建
  • 进程与线程:从入门到精通
  • Android 项目:画图白板APP开发(八)——Matrix位移放大缩小(附demo)
  • 【大前端++】【混合开发】【node】express 文件服务器本地搭建-模拟加载图片使用
  • 如何启动Greenplum中的某个segment
  • 校验用户身份是否过期,是否存在等等JWT
  • Docker 多阶段镜像构建与缓存利用性能优化实践指南
  • Jenkinsfile配置【1】
  • 2025年渗透测试面试题总结-72(题目+回答)
  • 网络安全相关搜索引擎
  • 【Unity性能优化——Stats面板】
  • 【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
  • AI如何赋能跨境支付,亚马逊云科技与PayerMax的联合探索
  • PAT乙级_1125 子串与子列_Python_AC解法_含疑难点
  • 华清远见25072班网络编程学习day6
  • 国标GB28181视频平台EasyGBS国标GB28181软件与公安数字化安防技术衔接方案
  • 我的Web开发实践笔记:从编码设置到项目运营
  • Regression Trees|回归树
  • [数据结构——Lesson14.快速排序]
  • 城乡供水一体化智慧水务管理系统方案——推动供水高质量发展的御控工业物联网解决方案
  • 云上安全的第一道门槛:身份与访问控制
  • Blender MCP—基于AI代理的智能三维建模协同框架
  • 从零开始打造复杂动作网页:现代CSS3动画与JavaScript交互完全指南
  • 基于 OpenCV 实现实时文档扫描:从轮廓检测到透视变换全流程解析
  • Qt 系统相关 - 事件2