RabbitMQ系列03 - AMQP分层与协议流转
AMQP 0-9-1 分层与生产、消费协议流转RabbitMQ客户端与 Broker 之间使用AMQP 0-9-1命令在信道Channel上收发底层由帧在TCP上传输。本文从协议分层理解「业务命令 → 会话 → 传输」并梳理建连、发消息、消费、确认阶段的典型方法/命令对应关系非完整规范抄录。目录为什么需要分层AMQP 三层模型帧与消息体Publish / Deliver 长什么样生产者侧从建连到 Basic.Publish消费者侧从 Qos 到 Ack常用命令与 Java API 对照摘录时序总览Mermaid与 RabbitMQ 管理视角的衔接免责声明为什么需要分层诉求分层带来的好处多路复用单条 TCP 上跑多个Channel互不混用命令状态可靠交互会话层处理同步应答、错误码业务层只关心「声明队列 / 发布」等语义二进制传输传输层统一组帧、长度与错误检测适配不同语言客户端AMQP 三层模型层次英文职责模块层Module Layer命令语义Queue.Declare、Basic.Publish、Basic.Consume等会话层Session Layer请求/响应配对、同步点、错误通知传输层Transport Layer帧frame、channel id、多路复用、心跳等应用代码Channel.basicPublish / basicConsume …Module LayerAMQP 命令Session Layer请求-应答与错误Transport Layer帧序列 / TCP┌─────────────────────────────────────┐ │ Module业务命令Declare/Publish │ ├─────────────────────────────────────┤ │ SessionMethod 与 Content 的配对 │ ├─────────────────────────────────────┤ │ TransportFrame 在 Connection 上交错 │ └─────────────────────────────────────┘帧与消息体Publish / Deliver 长什么样发布与投递类操作除Method 帧外通常还带部分内容Content Header属性投递模式、content-type、priority、headers 等Content Body一帧或多帧承载的payload因此抓包或调试时一条「消息」在链路上往往是Method Header Body的组合。生产者侧从建连到 Basic.PublishProtocol Header声明使用AMQP 0-9-1版本以协商为准。Connection 启动Connection.Start↔Start-Ok交换能力与安全机制。Connection 调优Tune↔Tune-Ok如帧大小、channel 数量等上限的协商。Connection.Open↔Open-Ok。Channel.Open↔Open-Ok。可选Exchange.Declare、Queue.Declare、Queue.Bind等。Basic.Publish Content Header Body。关闭Channel.Close、Connection.Close及对应-Ok。Connection.Tune通俗理解Broker 与客户端对齐「一条连接上能开多少信道、单帧多大」等约束避免一方发送过大帧或资源耗尽。消费者侧从 Qos 到 Ack建连、Channel.Open同生产者。Basic.Qos↔Qos-Ok设置prefetch未确认消息窗口影响分发速率与公平性。Basic.Consume↔Consume-Ok注册消费之后 Broker推送Basic.Deliver Header Body。业务处理完后Basic.Ack失败场景可用Nack / Reject是否重入队依参数。关闭 Channel / Connection。常用命令与 Java API 对照摘录场景AMQP 命令节选Java 客户端常见入口示意建连握手Connection.Start…Open-OkConnectionFactory.newConnection()开信道Channel.Open / Open-Okconnection.createChannel()发布Basic.Publish Contentchannel.basicPublish(...)消费Consume / Deliver / AckbasicConsume/basicAck流控窗口Basic.Qos / Qos-OkbasicQos(prefetch)释放Channel.Close、Connection.Closeclose()时序总览MermaidBrokerClientBrokerClientConnectionStart / Tune / Openalt[发布][消费]Channel.OpenChannel.Open-OkBasic.Publish Properties BodyBasic.Qos可选Basic.Qos-OkBasic.ConsumeBasic.Consume-OkBasic.Deliver BodyBasic.AckChannel.Close / Connection.Close与 RabbitMQ 管理视角的衔接管理界面或HTTP API上看到的connection、channel、publish rate、deliver rate与上述命令一一对应排查未确认堆积时常同时看Channel 的 prefetch、队列深度与Broker 侧资源告警、连接级流控是否生效。免责声明本文仅为学习用骨架安全机制SASL 等、完整方法列表、帧边界请以AMQP 0-9-1规范与RabbitMQ当前实现为准。主题AMQP、协议分层、Basic.Publish、Basic.Consume、帧。