日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

大众点评分布式系统监控开源框架cat源码阅读(个人笔记)

發布時間:2024/3/12 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大众点评分布式系统监控开源框架cat源码阅读(个人笔记) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

cat 數據接收 TcpSocketReceiver
該類中startServer(port)方法用于啟動netty,設置消息解碼器MessageDecoder和消息編碼器ClientMessageEncoder
消息傳輸使用消息header+消息body格式,解碼器中消息前4個字節即int類型用于存儲消息body的長度,當消息可讀長度
大于等于消息頭所讀長度時,讀取整個消息,調用CodecHandler類中的靜態方法decode進行解析,該方法先讀取消息body
的前3個字節并轉成String,如果是"PT1"則調用PlainTextMessageCodec類進行解析,如果是"NT1"則調用NativeMessageCodec
類進行解析,否則拋出異常.解析成功之后返回 MessageTree 接口類型的實現類.
默認系統有兩個實現類DefaultMessageTree和NullMessageTree

PlainTextMessageCodec 的解析過程
PlainTextMessageCodec實現MessageCodec接口,public decode方法首選調用ByteBuf的readInt()目的向后移動4字節,
readIndex指向消息body開頭部分,并創建DefaultMessageTree對象,調用private方法decode繼續解析,
該方法通過成員屬性ThreadLocal對象嘗試獲取Context對象,Context類有兩個成員對象一個是ByteBuf,一個是char[],
ByteBuf用于存放消息body,可以通過動態賦值,并在decode方法退出前被移除,而char[]只能在對象創建時初始化為1MB,充當緩存使用,如果未獲取到則創建,保證每個NIOEventLoop線程上只有一個Context對象.decode方法中調用decodeHeader方法解析一些基本數據例如id,domain,hostname等等,然后判斷消息體時候后剩余數據,有則調用decodeMessage方法解析

PlainTextMessageCodec類中decodeHeader(ctx, tree)方法解析過程
decodeHander方法通過調用成員屬性BufferHelper對象解析,該方法需要傳入Context對象和數據流分隔符,
從源碼可以看出,cat中將一些換行符使用2字節得文本替換,因此在未找到分隔符之前
遍歷讀取每個byte,并替換2字節換行符文本為1字節換行符,一旦找到則停止讀取,并將讀取得byte轉為字符串
數據流得讀取會一定readIndex,但是decodeHeader方法卻多次調用該方法解析id,domain,hostname等等,因為
可以推斷cat客戶端數據在推送到服務端時,一定是按照該順序傳入的字節流.

未完待續...

?

?

?

總結

以上是生活随笔為你收集整理的大众点评分布式系统监控开源框架cat源码阅读(个人笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。