0200-服務(wù)框架統(tǒng)一協(xié)議

enum MessageType { // 消息類(lèi)型
    Normal = 0,             // 正常消息
    NormalHeartbeat = 1,    // 端對(duì)端心跳消息
    ScannerHeartbeat = 2    //scanner心跳消息
}

enum CompressType { // 壓縮類(lèi)型 
    None = 0,        // 不壓縮 
    Snappy = 1,      // Snappy 
    Gzip = 2         // Gzip 
}

struct RequestInfo {                // 請(qǐng)求信息 
    1: required string serviceName; // 服務(wù)名 
    2: required i64 sequenceId;     // 消息序列號(hào) 
    3: required byte callType;      // 調(diào)用類(lèi)型  
    4: required i32 timeout;        // 請(qǐng)求超時(shí)時(shí)間 
}

enum CallType {   // 調(diào)用類(lèi)型 
    Reply = 0,     // 需要響應(yīng) 
    NoReply = 1,   // 不需要響應(yīng) 
}

struct ResponseInfo {           // 響應(yīng)信息 
    1: required i64 sequenceId; // 消息序列號(hào) 
    2: required byte status;    // 消息返回狀態(tài)
    3: optional string message; //異常消息
}

enum StatusCode{  
    Success = 0,              // 成功  
    ApplicationException = 1, // 業(yè)務(wù)異常,業(yè)務(wù)接口方法定義拋出的異常  
    RuntimeException = 2,     // 運(yùn)行時(shí)異常,一般由業(yè)務(wù)拋出 
    RpcException = 3,         // 框架異常,包含沒(méi)有被下列異常覆蓋到的框架異常 
    TransportException = 4,   // 傳輸異常 
    ProtocolException = 5,    // 協(xié)議異常 
    DegradeException = 6,     // 降級(jí)異常 
    SecurityException = 7,    // 安全異常 
    ServiceException = 8,     // 服務(wù)異常,如服務(wù)端找不到對(duì)應(yīng)的服務(wù)或方法 
    RemoteException = 9,      // 遠(yuǎn)程異常 
}

當(dāng)前基于thrift異常序列化實(shí)現(xiàn),除了ApplicationException異常是由用戶定義的exception類(lèi)進(jìn)行序列化,其他的所有異常的都通過(guò)TApplicationException類(lèi)進(jìn)行序列化。
struct TraceInfo {                        // Mtrace 跟蹤信息,原 MTthrift 中的 RequestHeader 
    1: required string clientAppkey;      // 客戶端應(yīng)用名 
    2: optional string traceId;           // Mtrace 的 traceId 
    3: optional string spanId;            // Mtrace 的 spanId 
    4: optional string rootMessageId;     // Cat 的 rootMessageId 
    5: optional string currentMessageId;  // Cat 的 currentMessageId 
    6: optional string serverMessageId;   // Cat 的 serverMessageId 
    7: optional bool debug;               // 是否強(qiáng)制采樣 
    8: optional bool sample;              // 是否采樣 
    9: optional string clientIp;              // 客戶端IP
}

struct LoadInfo{
     1: optional double averageLoad;
     2: optional i32 oldGC;
     3: optional i32 threadNum;                      //默認(rèn)線程池
     4: optional i32 queueSize;                      //主IO線程隊(duì)列長(zhǎng)度
     5: optional map<string, double> methodQpsMap;   //key為ServiceName.methodName,value為1分鐘內(nèi)的對(duì)應(yīng)的qps值(key為all,value則為所有方法的qps)
}

struct HeartbeatInfo {
    1:  optional string appkey;      // 解決重復(fù)注冊(cè),修改錯(cuò)誤appkey狀態(tài)的問(wèn)題
    2:  optional i64 sendTime;       // 發(fā)送心跳時(shí)間,微秒,方便業(yè)務(wù)剔除歷史心跳
    3:  optional LoadInfo loadInfo;  // 負(fù)載信息
    4:  required i32 status;         // 0:DEAD(未啟動(dòng)), 2:ALIVE(正常),4:STOPPED(禁用)
}
 
typedef map<string, string> Context // 消息上下文,用于傳遞自定義數(shù)據(jù)
 
struct Header {                                                // 消息頭
    1: optional byte messageType = MessageType.Normal;         // 消息類(lèi)型,必填
    2: optional RequestInfo requestInfo;                       // 請(qǐng)求信息,必填
    3: optional ResponseInfo responseInfo;                     // 響應(yīng)信息
    4: optional TraceInfo traceInfo;                           // 跟蹤信息
    5: optional Context globalContext;                         // 全鏈路消息上下文,總大小不超過(guò) 512 Bytes
    6: optional Context localContext;                          // 單次消息上下文,總大小不超過(guò) 2K Bytes
    7: optional HeartbeatInfo heartbeatInfo;                   // 心跳信息
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容