[四]RabbitMQ-客户端源码之Frame
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
歡迎跳轉到本文的原文鏈接:https://honeypps.com/mq/rabbitmq-client-source-code-of-frame/
Frame是指AMQP協議層面的通信幀(一個正式定義的連接數據包)。
我們來看下Frame類中的成員變量有哪些:
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 定義了如下的幀類型:
通道編號為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。
附:本系列全集
歡迎跳轉到本文的原文鏈接:https://honeypps.com/mq/rabbitmq-client-source-code-of-frame/
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
總結
以上是生活随笔為你收集整理的[四]RabbitMQ-客户端源码之Frame的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [三]RabbitMQ-客户端源码之Ch
- 下一篇: [五]RabbitMQ-客户端源码之AM