三、RabbitMQ-客户端源码之ChannelManager

AI-摘要
Tianli GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
三、RabbitMQ-客户端源码之ChannelManager
云少[四]RabbitMQ-客户端源码之Frame
Frame是指AMQP协议层面的通信帧(一个正式定义的连接数据包)。
我们来看下Frame类中的成员变量有哪些:
1 | /** Frame type code */ |
Frame里的三个成员变量:type, channel, payload是真正和报文有关的。accumulator是为了方便内部编程的一个变量。Frame类就是对这个玩意儿捯饬捯饬,没有什么难度,好奇的同学可以自己翻看下,本文主要来阐述下AMQP中的Frame的一些信息。
一个通信帧的协议层面的结构如下:
序号 | 名称 | 占用字节 |
---|---|---|
1 | frame type | 1B |
2 | channel number | 2B |
3 | payload length | 4B |
4 | payload | [0-N]B |
5 | FRAME_END(结束帧) | 1B(0xCE) |
这样可以知道:一个通信帧的最小大小为:1B+2B+4B+0B+1B=8B.
AMQP 定义了如下的帧类型:
- Type = 1, “METHOD”: 方法帧
- Type = 2, “HEADER”: 内容头帧
- Type = 3, “BODY”: 内容体帧.
- Type = 8, “HEARTBEAT”: 心跳帧.
通道编号为0的代表全局连接中的所有帧,1-65535代表特定通道的帧.
方法帧
type=1, payload包含以下内容:
classId:2B
methodId:2B
argument:NB
内容头帧
type=2,payload包含以下内容
classId:2B
weight:2B
BodySize:8B
property flags:2B
properties: NB
内容帧
type=3, payload不进行具体解析,
心跳帧
tpye=8,没有payload。心跳帧的channel number必须为0。
评论
匿名评论隐私政策
TwikooArtalk
✅ 你无需删除空行,直接评论以获取最佳展示效果