[四]RabbitMQ-客户端源码之Frame
歡迎支持筆者新作:《深入理解Kafka:核心設(shè)計(jì)與實(shí)踐原理》和《RabbitMQ實(shí)戰(zhàn)指南》,同時(shí)歡迎關(guān)注筆者的微信公眾號(hào):朱小廝的博客。
歡迎跳轉(zhuǎn)到本文的原文鏈接:https://honeypps.com/mq/rabbitmq-client-source-code-of-frame/
Frame是指AMQP協(xié)議層面的通信幀(一個(gè)正式定義的連接數(shù)據(jù)包)。
我們來(lái)看下Frame類中的成員變量有哪些:
Frame里的三個(gè)成員變量:type, channel, payload是真正和報(bào)文有關(guān)的。accumulator是為了方便內(nèi)部編程的一個(gè)變量。Frame類就是對(duì)這個(gè)玩意兒捯飭捯飭,沒(méi)有什么難度,好奇的同學(xué)可以自己翻看下,本文主要來(lái)闡述下AMQP中的Frame的一些信息。
一個(gè)通信幀的協(xié)議層面的結(jié)構(gòu)如下:
| 1 | frame type | 1B |
| 2 | channel number | 2B |
| 3 | payload length | 4B |
| 4 | payload | [0-N]B |
| 5 | FRAME_END(結(jié)束幀) | 1B(0xCE) |
這樣可以知道:一個(gè)通信幀的最小大小為:1B+2B+4B+0B+1B=8B.
AMQP 定義了如下的幀類型:
通道編號(hào)為0的代表全局連接中的所有幀,1-65535代表特定通道的幀.
方法幀
type=1, payload包含以下內(nèi)容:
classId:2B
methodId:2B
argument:NB
內(nèi)容頭幀
type=2,payload包含以下內(nèi)容
classId:2B
weight:2B
BodySize:8B
property flags:2B
properties: NB
內(nèi)容幀
type=3, payload不進(jìn)行具體解析,
心跳幀
tpye=8,沒(méi)有payload。心跳幀的channel number必須為0。
附:本系列全集
歡迎跳轉(zhuǎn)到本文的原文鏈接:https://honeypps.com/mq/rabbitmq-client-source-code-of-frame/
歡迎支持筆者新作:《深入理解Kafka:核心設(shè)計(jì)與實(shí)踐原理》和《RabbitMQ實(shí)戰(zhàn)指南》,同時(shí)歡迎關(guān)注筆者的微信公眾號(hào):朱小廝的博客。
總結(jié)
以上是生活随笔為你收集整理的[四]RabbitMQ-客户端源码之Frame的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [三]RabbitMQ-客户端源码之Ch
- 下一篇: [五]RabbitMQ-客户端源码之AM