Skip to content

核心模型与消息路由

核心对象

对象作用
Producer发布消息到 Exchange
Exchange根据类型、Routing Key 和 Binding 路由消息
Queue保存等待投递的消息
Binding建立 Exchange 到 Queue 或 Exchange 的路由关系
Consumer从 Queue 接收消息并 Ack/Nack
Connection客户端到 Broker 的 TCP 连接
Channel复用 Connection 的轻量协议会话
Virtual Host隔离 Exchange、Queue、Binding 和权限的逻辑租户

Producer 通常不直接发送到 Queue,而是发送到 Exchange。消息没有匹配的 Queue 时,是否退回或丢弃取决于 mandatory、Alternate Exchange 等配置。

Exchange 类型

类型路由规则典型场景
DirectBinding Key 与 Routing Key 精确匹配按业务类别路由
Topic使用 *# 做分段模式匹配多维事件订阅
Fanout忽略 Routing Key,广播到全部绑定广播通知
Headers按消息 Header 匹配不适合用字符串 Key 表达的规则

Topic Exchange 中 * 匹配一个单词,# 匹配零个或多个单词,单词以点分隔。

Connection 与 Channel

Connection 建立和维护成本较高,应用通常复用少量长连接,并为并发操作创建 Channel。Channel 不是线程安全的共享对象,通常不要让多个发布线程无保护地复用同一个 Channel。

大量短连接或 Channel 泄漏会消耗文件描述符、内存和调度资源。连接恢复后,还应确认队列、Consumer 和 Publisher Confirm 状态是否正确恢复。

Queue 声明

  • Durable:Broker 重启后保留 Queue 元数据;
  • Exclusive:只允许声明它的 Connection 使用,连接关闭后删除;
  • Auto-delete:最后一个 Consumer 取消后满足条件时删除;
  • Arguments:队列类型、TTL、最大长度、死信等策略。

Durable Queue 不代表其中每条消息都持久化;消息还需要以持久化 Delivery Mode 发布,并配合 Confirm 和高可用队列评估可靠性。

消费与顺序

多个 Consumer 订阅同一 Queue 时,消息会在它们之间分发。需要广播时,应为每个订阅者建立独立 Queue,并绑定到同一 Exchange。

basic.qos 的 Prefetch 限制未确认消息数量。Queue 有入队顺序,但多 Consumer、重试、重新入队、优先级和故障恢复都会影响端到端顺序。

参考资料