KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA

RabbitMQ 工程课 · 课程导读 — keel 龙骨

RabbitMQ 工程课:路由、确认与死信 的参考信息:RabbitMQ 工程课 · 课程导读

你现在的起点

如果上面有几条对上,这门课就是为你写的。

一条能走通的学习路径

AMQP 模型全景(一条消息在 broker 里经过了哪些对象,边界在哪)
  → 路由实测(四种 exchange 各收到什么,通配符的边界在哪)
  → 上行可靠性(publish 静默丢失的三段,各自补哪一段)
  → 下行可靠性(ack / nack / requeue / prefetch 的真实语义)
  → 死信与延迟(x-death 长什么样,延迟队列的三种做法)
  → 集群与队列类型(classic 与 quorum 的取舍,Raft 语义)
  → 流控与运维(内存告警怎么变成背压,该盯哪些指标)

七章共用一套拓扑:vhost /lab,交换机 lab.ex.direct / lab.ex.topic / lab.ex.fanout / lab.ex.headers / lab.ex.dlx,队列 lab.dl.main / lab.dlq / lab.quorum.q / lab.persist.q。每一章都在上一章的对象上加一块,不重新发明例子。

章节地图

章 关键问题 你会亲手验证什么
00 · AMQP 模型全景 一条 publish 到 consume 的链路里,connection / channel / vhost / exchange / queue / binding 各管什么边界 一个 TCP 连接上开 3 个 channel,在 list_connections 看到 channels 3、关掉一个变成 2;并撞上 4.x 拒绝非持久非独占队列的真实报错
01 · 路由实测 direct / topic / fanout / headers 四种 exchange 的匹配规则差在哪,topic 的 * 与 # 边界在哪 同一批 routing key 分别投给四种 exchange,打印每个队列实际收到的消息;验证 a.*.c 不匹配 a.c、a.# 匹配 a.c
02 · 上行可靠性 publish 什么时候会静默丢失,confirm / mandatory / alternate exchange / 持久化各补哪一段 mandatory=True 下拿回 basic.return;reject-publish 造出真实 basic.nack;重启 broker 看 delivery_mode=2 与 =1 的存活差异
03 · 下行可靠性 ack / nack / requeue / prefetch 的语义,慢消费者为什么会把队列拖垮 一个慢消费者加一个快消费者,对比不设 prefetch 与 prefetch_count=1 时两者各消费多少条
04 · 死信与延迟 x-death 的真实结构是什么,延迟队列有几种做法、代价各是什么 让消息被 nack(requeue=False) 与 TTL 到期进死信队列,把 x-death 六个字段完整打出来
05 · 集群与队列类型 classic 与 quorum 差在哪,Raft 语义下什么算多数派、脑裂怎么收场 list_queues name type 看到两种类型,rabbitmq-queues quorum_status 看到 raft 成员与 leader;并如实标注单节点跑不出选主
06 · 流控与运维 内存/磁盘告警怎么变成对 publisher 的背压,积压时先看什么 把水位调到 0.0001 造出告警,看 list_connections 的 state: blocked 与客户端被卡住,再改回 0.4

学完这门课你能做什么

前置要求

↓ 下一步:00 章 · AMQP 模型全景

进入 keel 阅读