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...