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; // 心跳信息
}
0200-服務(wù)框架統(tǒng)一協(xié)議
?著作權(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ù)。
【社區(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ù)。