微信公衆號:[中間件興趣圈]
做者簡介:《RocketMQ技術內幕》做者html
Dubbo序列化支持java、compactedjava、nativejava、fastjson、fst、hessian二、kryo,其中默認hessian2。其中java、compactedjava、nativejava屬於原生java的序列化。java
整個Dubbo序列化的類設機機器優雅,職責單一,其總體類圖以下:
web
主要分爲三個維度進行組織:Serialization(序列化策略)、DataInput(反序列化,二進制->對象)、DataOutput(序列化,對象->二進制流)。上述類圖的設計及其優雅,遵循的設計原則大致爲:json
單一職責,抽象出Input、Output、Serialization,從而抽象出3個維度的類繼承體系。安全
優先使用類聚合,類在多個維度分別衍生出3個繼承體系,而後採用聚合,Serialization聚合input,output,典型的橋接模式。
微信
本節只簡單介紹各類序列化的基本特色,將在後續章節中重點探討kryo、hession2序列化的編碼原理。app
kryo序列化概述
在這裏我再也不重複介紹kryo,若是是第一次接觸kryo,請詳細查看:《Kryo官方文檔中文翻譯》:https://blog.csdn.net/fanjunjaden/article/details/72823866,對kryo序列化機制有一個全貌的概念,看過上述材料後應該知道kryo具有以下幾個典型的特色。運維
一、支持泛型性能
二、序列化字節序列中可包含類型,反序列化時無需傳入類型,對應的API:
學習
public void writeClassAndObject (Output output, Object object)
public Object readClassAndObject (Input input)
三、支持循環引用
四、類註冊機制,主要是在寫入類全路徑名時,若是該類註冊了,會分配一個int類型的值代替字符串的全面,能減小序列化後二進制流的大小。
五、Kryo對象非線程安全性,一般使用ThreadLocal、Kryo對象池。
hession2序列化概述
hession2協議我就不班門弄斧了,這裏推薦兩個不錯的網站來學習hession2。
Hession2官方文檔(英文版本):http://hessian.caucho.com/doc/hessian-serialization.html
Hession2協議漫談(官方文檔中文版本):(https://www.jianshu.com/p/e800d8af4e22
後續篇章會從源碼的角度,剖析高性能對象序列化協議Kryo的序列化實現原理。
廣告:做者新書《RocketMQ技術內幕》已上市
《RocketMQ技術內幕》已出版上市,目前可在主流購物平臺(京東、天貓等)購買,本書從源碼角度深度分析了RocketMQ NameServer、消息發送、消息存儲、消息消費、消息過濾、主從同步HA、事務消息;在實戰篇重點介紹了RocketMQ運維管理界面與當前支持的39個運維命令;並在附錄部分羅列了RocketMQ幾乎全部的配置參數。本書獲得了RocketMQ創始人、阿里巴巴Messaging開源技術負責人、Linux OpenMessaging 主席的高度承認並做序推薦。目前是國內第一本成體系剖析RocketMQ的書籍。
新書7折優惠!7折優惠!7折優惠!
更多文章請關注微信公衆號:
推薦關注微信公衆號:RocketMQ官方微信公衆號:
本文分享自微信公衆號 - 中間件興趣圈(dingwpmz_zjj)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。