簡介
dubbo協議是dubbo默認的協議,它的特點如下:
連接個數:單連接
連接方式:長連接
傳輸協議:TCP
傳輸方式:NIO異步傳輸
序列化:Hessian二進制序列化
適用范圍:傳入傳出參數數據包較小(建議小于100K),消費者比提供者個數多,單一消費者無法壓滿提供者,盡量不要用dubbo協議傳輸大文件或超大字符串。
適用場景:常規遠程服務方法調用
Dubbo 協議采用經典定長包頭+變長包體的協議設計,包頭記錄了數據的序列化方式,請求狀態,數據長度等信息,包體是請求/響應對象序列化后的二進制數據。格式見下圖
字段說明:2字節short類型的Magic 1字節的消息標志位 5位序列化id 1位心跳還是正常請求 1位雙向還是單向 1位請求還是響應 1字節的狀態位 8字節的消息id 4字節數據長度
網絡傳輸層傳輸的就是這種二進制數據,基本流程如下
源碼走讀
-
request編碼
ExchangeCodec類 request解碼(DecodeableRpcInvocation.decode())
response編碼(DubboCodec.encodeResponseData())
request解碼(DecodeableRpcResult.decode())