四 RabbitMQ 客戶端原始碼之Frame

2021-07-30 16:50:37 字數 1769 閱讀 7752

frame是指amqp協議層面的通訊幀(乙個正式定義的連線資料報)。

我們來看下frame類中的成員變數有哪些:

/** frame type code */

public final int type;

/** frame channel number, 0-65535 */

public final int channel;

/** frame payload bytes (for inbound frames) */

private final byte payload;

/** frame payload (for outbound frames) */

private final bytearrayoutputstream accumulator;

frame裡的三個成員變數:type, channel, payload是真正和報文有關的。accumulator是為了方便內部程式設計的乙個變數。frame類就是對這個玩意兒捯飭捯飭,沒有什麼難度,好奇的同學可以自己翻看下,本文主要來闡述下amqp中的frame的一些資訊。

乙個通訊幀的協議層面的結構如下:

序號名稱

占用位元組

1frame type1b2

channel number2b3

payload length4b4

payload

[0-n]b

5frame_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。

[conclusion]rabbitmq-客戶端原始碼之總結

[一]rabbitmq-客戶端原始碼之connectionfactory

[二]rabbitmq-客戶端原始碼之amqconnection

[三]rabbitmq-客戶端原始碼之channelmanager

[四]rabbitmq-客戶端原始碼之frame

[五]rabbitmq-客戶端原始碼之amqchannel

[六]rabbitmq-客戶端原始碼之amqcommand

[七]rabbitmq-客戶端原始碼之amqpimpl+method

[八]rabbitmq-客戶端原始碼之channeln

[九]rabbitmq-客戶端原始碼之consumer

四 RabbitMQ 客戶端原始碼之Frame

frame是指amqp協議層面的通訊幀 乙個正式定義的連線資料報 我們來看下frame類中的成員變數有哪些 frame type code public final int type frame channel number,0 65535 public final int channel fram...

HDFS客戶端 輸出流原始碼解析

一 建立檔案 1 dfsclient.create 用於建立乙個空檔案,返回乙個輸出流物件。在函式內部,會構造乙個dfsoutputstream,它主要是通過namenode的rpc方法,建立乙個檔案到namenode。2 此建構函式還會計算乙個包中最大可以放的資料。一般來說,資料報最大能達到64k...

客戶端提交mr job原始碼流程分析

job job.getinstance獲得job物件 job.set 新增configuration等配置引數 job.waitforcomplete 原始碼內部實則呼叫submit 方法 之後jobsubmiter中有個成員cluster cluster中又有個成員proxy 物件,幫助提交到ya...