RabbitMQ 消息路由机制全解析:路由原理 + 4种路由策略 + 流程图 + 实战总结
-
- 前言
- 一、消息路由基础认知:什么是 RabbitMQ 路由?
-
- 1.1 路由定义
- 1.2 路由三要素(必须记住)
- 1.3 消息路由完整流程图
- 1.4 核心一句话
- 二、RabbitMQ 消息路由的 4 种常见策略(对应 4 种交换机)
- 三、路由策略一:直连路由(Direct Exchange)—— 精确匹配
-
- 3.1 路由规则
- 3.2 路由流程图
- 3.3 特点
- 3.4 应用场景
- 四、路由策略二:广播路由(Fanout Exchange)—— 无条件群发
-
- 4.1 路由规则
- 4.2 路由流程图
- 4.3 特点
- 4.4 应用场景
- 五、路由策略三:主题路由(Topic Exchange)—— 通配符匹配
-
- 5.1 路由规则
- 5.2 通配符规则
- 5.3 路由流程图
- 5.4 特点
- 5.5 应用场景
- 六、路由策略四:头路由(Headers Exchange)—— 消息头匹配
-
- 6.1 路由规则
- 6.2 特点
- 6.3 生产建议
- 七、4 种路由策略对比表(面试+开发必背)
- 八、消息路由的核心规则(非常重要)
- 九、生产环境路由策略选择指南
- 十、总结(核心一句话)
-
- RabbitMQ 路由机制总结
|
🌺The Begin🌺点点关注,收藏不迷路🌺 |
前言
在 RabbitMQ 中,消息并不是直接发送到队列,而是先发送到交换机(Exchange),再由交换机根据路由规则转发到对应的队列,这个过程就是消息路由。
理解消息路由,是掌握 RabbitMQ 消息流向、精准投递、业务解耦的核心。本文将用通俗原理、流程图、4 种路由策略、实战场景带你彻底搞懂 RabbitMQ 消息路由机制。
一、消息路由基础认知:什么是 RabbitMQ 路由?
1.1 路由定义
消息路由:生产者发送消息到交换机,交换机根据路由键(RoutingKey)+ 绑定键(BindingKey)+ 交换机类型,将消息精准转发到一个或多个队列的过程。
1.2 路由三要素(必须记住)
1.3 消息路由完整流程图
#mermaid-svg-QUD4HqFwdWv82b47{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-QUD4HqFwdWv82b47 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-QUD4HqFwdWv82b47 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-QUD4HqFwdWv82b47 .error-icon{fill:#552222;}#mermaid-svg-QUD4HqFwdWv82b47 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QUD4HqFwdWv82b47 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-QUD4HqFwdWv82b47 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QUD4HqFwdWv82b47 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QUD4HqFwdWv82b47 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-QUD4HqFwdWv82b47 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QUD4HqFwdWv82b47 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QUD4HqFwdWv82b47 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QUD4HqFwdWv82b47 .marker.cross{stroke:#333333;}#mermaid-svg-QUD4HqFwdWv82b47 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QUD4HqFwdWv82b47 p{margin:0;}#mermaid-svg-QUD4HqFwdWv82b47 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-QUD4HqFwdWv82b47 .cluster-label text{fill:#333;}#mermaid-svg-QUD4HqFwdWv82b47 .cluster-label span{color:#333;}#mermaid-svg-QUD4HqFwdWv82b47 .cluster-label span p{background-color:transparent;}#mermaid-svg-QUD4HqFwdWv82b47 .label text,#mermaid-svg-QUD4HqFwdWv82b47 span{fill:#333;color:#333;}#mermaid-svg-QUD4HqFwdWv82b47 .node rect,#mermaid-svg-QUD4HqFwdWv82b47 .node circle,#mermaid-svg-QUD4HqFwdWv82b47 .node ellipse,#mermaid-svg-QUD4HqFwdWv82b47 .node polygon,#mermaid-svg-QUD4HqFwdWv82b47 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-QUD4HqFwdWv82b47 .rough-node .label text,#mermaid-svg-QUD4HqFwdWv82b47 .node .label text,#mermaid-svg-QUD4HqFwdWv82b47 .image-shape .label,#mermaid-svg-QUD4HqFwdWv82b47 .icon-shape .label{text-anchor:middle;}#mermaid-svg-QUD4HqFwdWv82b47 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-QUD4HqFwdWv82b47 .rough-node .label,#mermaid-svg-QUD4HqFwdWv82b47 .node .label,#mermaid-svg-QUD4HqFwdWv82b47 .image-shape .label,#mermaid-svg-QUD4HqFwdWv82b47 .icon-shape .label{text-align:center;}#mermaid-svg-QUD4HqFwdWv82b47 .node.clickable{cursor:pointer;}#mermaid-svg-QUD4HqFwdWv82b47 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-QUD4HqFwdWv82b47 .arrowheadPath{fill:#333333;}#mermaid-svg-QUD4HqFwdWv82b47 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-QUD4HqFwdWv82b47 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-QUD4HqFwdWv82b47 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QUD4HqFwdWv82b47 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-QUD4HqFwdWv82b47 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QUD4HqFwdWv82b47 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-QUD4HqFwdWv82b47 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-QUD4HqFwdWv82b47 .cluster text{fill:#333;}#mermaid-svg-QUD4HqFwdWv82b47 .cluster span{color:#333;}#mermaid-svg-QUD4HqFwdWv82b47 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-QUD4HqFwdWv82b47 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-QUD4HqFwdWv82b47 rect.text{fill:none;stroke-width:0;}#mermaid-svg-QUD4HqFwdWv82b47 .icon-shape,#mermaid-svg-QUD4HqFwdWv82b47 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QUD4HqFwdWv82b47 .icon-shape p,#mermaid-svg-QUD4HqFwdWv82b47 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-QUD4HqFwdWv82b47 .icon-shape .label rect,#mermaid-svg-QUD4HqFwdWv82b47 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QUD4HqFwdWv82b47 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-QUD4HqFwdWv82b47 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-QUD4HqFwdWv82b47 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
携带 RoutingKey
根据路由规则匹配
匹配成功
生产者
交换机 Exchange
绑定 Binding
队列 Queue
消费者
1.4 核心一句话
交换机类型决定路由策略,路由键与绑定键决定消息去向。
二、RabbitMQ 消息路由的 4 种常见策略(对应 4 种交换机)
RabbitMQ 一共有 4 种路由策略,分别对应 4 种交换机类型,也是面试必考、开发必用的核心知识点。
三、路由策略一:直连路由(Direct Exchange)—— 精确匹配
3.1 路由规则
RoutingKey == BindingKey 完全一致,才会转发消息。
3.2 路由流程图
#mermaid-svg-oUusfItX0C9mWEsx{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-oUusfItX0C9mWEsx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-oUusfItX0C9mWEsx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-oUusfItX0C9mWEsx .error-icon{fill:#552222;}#mermaid-svg-oUusfItX0C9mWEsx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-oUusfItX0C9mWEsx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-oUusfItX0C9mWEsx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-oUusfItX0C9mWEsx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-oUusfItX0C9mWEsx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-oUusfItX0C9mWEsx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-oUusfItX0C9mWEsx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-oUusfItX0C9mWEsx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-oUusfItX0C9mWEsx .marker.cross{stroke:#333333;}#mermaid-svg-oUusfItX0C9mWEsx svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-oUusfItX0C9mWEsx p{margin:0;}#mermaid-svg-oUusfItX0C9mWEsx .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-oUusfItX0C9mWEsx .cluster-label text{fill:#333;}#mermaid-svg-oUusfItX0C9mWEsx .cluster-label span{color:#333;}#mermaid-svg-oUusfItX0C9mWEsx .cluster-label span p{background-color:transparent;}#mermaid-svg-oUusfItX0C9mWEsx .label text,#mermaid-svg-oUusfItX0C9mWEsx span{fill:#333;color:#333;}#mermaid-svg-oUusfItX0C9mWEsx .node rect,#mermaid-svg-oUusfItX0C9mWEsx .node circle,#mermaid-svg-oUusfItX0C9mWEsx .node ellipse,#mermaid-svg-oUusfItX0C9mWEsx .node polygon,#mermaid-svg-oUusfItX0C9mWEsx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-oUusfItX0C9mWEsx .rough-node .label text,#mermaid-svg-oUusfItX0C9mWEsx .node .label text,#mermaid-svg-oUusfItX0C9mWEsx .image-shape .label,#mermaid-svg-oUusfItX0C9mWEsx .icon-shape .label{text-anchor:middle;}#mermaid-svg-oUusfItX0C9mWEsx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-oUusfItX0C9mWEsx .rough-node .label,#mermaid-svg-oUusfItX0C9mWEsx .node .label,#mermaid-svg-oUusfItX0C9mWEsx .image-shape .label,#mermaid-svg-oUusfItX0C9mWEsx .icon-shape .label{text-align:center;}#mermaid-svg-oUusfItX0C9mWEsx .node.clickable{cursor:pointer;}#mermaid-svg-oUusfItX0C9mWEsx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-oUusfItX0C9mWEsx .arrowheadPath{fill:#333333;}#mermaid-svg-oUusfItX0C9mWEsx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-oUusfItX0C9mWEsx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-oUusfItX0C9mWEsx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oUusfItX0C9mWEsx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-oUusfItX0C9mWEsx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oUusfItX0C9mWEsx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-oUusfItX0C9mWEsx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-oUusfItX0C9mWEsx .cluster text{fill:#333;}#mermaid-svg-oUusfItX0C9mWEsx .cluster span{color:#333;}#mermaid-svg-oUusfItX0C9mWEsx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-oUusfItX0C9mWEsx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-oUusfItX0C9mWEsx rect.text{fill:none;stroke-width:0;}#mermaid-svg-oUusfItX0C9mWEsx .icon-shape,#mermaid-svg-oUusfItX0C9mWEsx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oUusfItX0C9mWEsx .icon-shape p,#mermaid-svg-oUusfItX0C9mWEsx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-oUusfItX0C9mWEsx .icon-shape .label rect,#mermaid-svg-oUusfItX0C9mWEsx .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oUusfItX0C9mWEsx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-oUusfItX0C9mWEsx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-oUusfItX0C9mWEsx :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
RoutingKey: order
精确匹配 order
不匹配 pay
生产者
Direct 交换机
队列1
队列2
3.3 特点
- 一对一精准投递
- 速度最快
- 最常用
3.4 应用场景
订单通知、日志分级、任务分发、点对点消息。
四、路由策略二:广播路由(Fanout Exchange)—— 无条件群发
4.1 路由规则
忽略 RoutingKey,消息广播到所有绑定队列。
4.2 路由流程图
#mermaid-svg-ztwBkn6xFOjzDeJn{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ztwBkn6xFOjzDeJn .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ztwBkn6xFOjzDeJn .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ztwBkn6xFOjzDeJn .error-icon{fill:#552222;}#mermaid-svg-ztwBkn6xFOjzDeJn .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ztwBkn6xFOjzDeJn .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ztwBkn6xFOjzDeJn .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ztwBkn6xFOjzDeJn .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ztwBkn6xFOjzDeJn .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ztwBkn6xFOjzDeJn .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ztwBkn6xFOjzDeJn .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ztwBkn6xFOjzDeJn .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ztwBkn6xFOjzDeJn .marker.cross{stroke:#333333;}#mermaid-svg-ztwBkn6xFOjzDeJn svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ztwBkn6xFOjzDeJn p{margin:0;}#mermaid-svg-ztwBkn6xFOjzDeJn .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-ztwBkn6xFOjzDeJn .cluster-label text{fill:#333;}#mermaid-svg-ztwBkn6xFOjzDeJn .cluster-label span{color:#333;}#mermaid-svg-ztwBkn6xFOjzDeJn .cluster-label span p{background-color:transparent;}#mermaid-svg-ztwBkn6xFOjzDeJn .label text,#mermaid-svg-ztwBkn6xFOjzDeJn span{fill:#333;color:#333;}#mermaid-svg-ztwBkn6xFOjzDeJn .node rect,#mermaid-svg-ztwBkn6xFOjzDeJn .node circle,#mermaid-svg-ztwBkn6xFOjzDeJn .node ellipse,#mermaid-svg-ztwBkn6xFOjzDeJn .node polygon,#mermaid-svg-ztwBkn6xFOjzDeJn .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ztwBkn6xFOjzDeJn .rough-node .label text,#mermaid-svg-ztwBkn6xFOjzDeJn .node .label text,#mermaid-svg-ztwBkn6xFOjzDeJn .image-shape .label,#mermaid-svg-ztwBkn6xFOjzDeJn .icon-shape .label{text-anchor:middle;}#mermaid-svg-ztwBkn6xFOjzDeJn .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ztwBkn6xFOjzDeJn .rough-node .label,#mermaid-svg-ztwBkn6xFOjzDeJn .node .label,#mermaid-svg-ztwBkn6xFOjzDeJn .image-shape .label,#mermaid-svg-ztwBkn6xFOjzDeJn .icon-shape .label{text-align:center;}#mermaid-svg-ztwBkn6xFOjzDeJn .node.clickable{cursor:pointer;}#mermaid-svg-ztwBkn6xFOjzDeJn .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ztwBkn6xFOjzDeJn .arrowheadPath{fill:#333333;}#mermaid-svg-ztwBkn6xFOjzDeJn .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ztwBkn6xFOjzDeJn .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ztwBkn6xFOjzDeJn .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ztwBkn6xFOjzDeJn .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ztwBkn6xFOjzDeJn .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ztwBkn6xFOjzDeJn .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ztwBkn6xFOjzDeJn .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ztwBkn6xFOjzDeJn .cluster text{fill:#333;}#mermaid-svg-ztwBkn6xFOjzDeJn .cluster span{color:#333;}#mermaid-svg-ztwBkn6xFOjzDeJn div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ztwBkn6xFOjzDeJn .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ztwBkn6xFOjzDeJn rect.text{fill:none;stroke-width:0;}#mermaid-svg-ztwBkn6xFOjzDeJn .icon-shape,#mermaid-svg-ztwBkn6xFOjzDeJn .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ztwBkn6xFOjzDeJn .icon-shape p,#mermaid-svg-ztwBkn6xFOjzDeJn .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ztwBkn6xFOjzDeJn .icon-shape .label rect,#mermaid-svg-ztwBkn6xFOjzDeJn .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ztwBkn6xFOjzDeJn .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ztwBkn6xFOjzDeJn .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ztwBkn6xFOjzDeJn :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
生产者
Fanout 交换机
队列1
队列2
队列3
4.3 特点
- 不匹配任何键
- 性能最高
- 全量分发
4.4 应用场景
缓存同步、配置广播、集群通知、全员推送。
五、路由策略三:主题路由(Topic Exchange)—— 通配符匹配
5.1 路由规则
RoutingKey 与 BindingKey 使用通配符模糊匹配。
5.2 通配符规则
- *:匹配一个单词
- #:匹配0 个或多个单词
- 单词用 . 分隔
5.3 路由流程图
#mermaid-svg-lTq1Rz6kvqCwuFN2{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-lTq1Rz6kvqCwuFN2 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .error-icon{fill:#552222;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .marker.cross{stroke:#333333;}#mermaid-svg-lTq1Rz6kvqCwuFN2 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-lTq1Rz6kvqCwuFN2 p{margin:0;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .cluster-label text{fill:#333;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .cluster-label span{color:#333;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .cluster-label span p{background-color:transparent;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .label text,#mermaid-svg-lTq1Rz6kvqCwuFN2 span{fill:#333;color:#333;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .node rect,#mermaid-svg-lTq1Rz6kvqCwuFN2 .node circle,#mermaid-svg-lTq1Rz6kvqCwuFN2 .node ellipse,#mermaid-svg-lTq1Rz6kvqCwuFN2 .node polygon,#mermaid-svg-lTq1Rz6kvqCwuFN2 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .rough-node .label text,#mermaid-svg-lTq1Rz6kvqCwuFN2 .node .label text,#mermaid-svg-lTq1Rz6kvqCwuFN2 .image-shape .label,#mermaid-svg-lTq1Rz6kvqCwuFN2 .icon-shape .label{text-anchor:middle;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .rough-node .label,#mermaid-svg-lTq1Rz6kvqCwuFN2 .node .label,#mermaid-svg-lTq1Rz6kvqCwuFN2 .image-shape .label,#mermaid-svg-lTq1Rz6kvqCwuFN2 .icon-shape .label{text-align:center;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .node.clickable{cursor:pointer;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .arrowheadPath{fill:#333333;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-lTq1Rz6kvqCwuFN2 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lTq1Rz6kvqCwuFN2 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-lTq1Rz6kvqCwuFN2 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .cluster text{fill:#333;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .cluster span{color:#333;}#mermaid-svg-lTq1Rz6kvqCwuFN2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-lTq1Rz6kvqCwuFN2 rect.text{fill:none;stroke-width:0;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .icon-shape,#mermaid-svg-lTq1Rz6kvqCwuFN2 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .icon-shape p,#mermaid-svg-lTq1Rz6kvqCwuFN2 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .icon-shape .label rect,#mermaid-svg-lTq1Rz6kvqCwuFN2 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lTq1Rz6kvqCwuFN2 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-lTq1Rz6kvqCwuFN2 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-lTq1Rz6kvqCwuFN2 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
RoutingKey: log.info.user
log.*.*
log.#
生产者
Topic 交换机
队列1
队列2
5.4 特点
- 最灵活
- 支持复杂业务路由
- 生产高频使用
5.5 应用场景
订单多状态通知、日志分类、业务模块化消息。
六、路由策略四:头路由(Headers Exchange)—— 消息头匹配
6.1 路由规则
不使用 RoutingKey,根据消息头(Headers)键值对匹配。
6.2 特点
- 性能低
- 用法复杂
- 几乎不用
6.3 生产建议
直接用 Topic 交换机替代。
七、4 种路由策略对比表(面试+开发必背)
| 直连路由 | Direct | 精确匹配 | 中 | ⭐⭐⭐⭐⭐ |
| 广播路由 | Fanout | 全部转发 | 低 | ⭐⭐⭐⭐ |
| 主题路由 | Topic | 通配符匹配 | 极高 | ⭐⭐⭐⭐⭐ |
| 头路由 | Headers | 消息头匹配 | 高 | ⭐ |
八、消息路由的核心规则(非常重要)
- 有回退机制 → 返回生产者
- 无回退机制 → 直接丢弃
九、生产环境路由策略选择指南
十、总结(核心一句话)
RabbitMQ 路由机制总结
掌握路由机制,你就完全掌握了 RabbitMQ 的消息流向灵魂!

|
🌺The End🌺点点关注,收藏不迷路🌺 |





