這篇文章主要介紹“dubbo接口調用過程中,部分字段值丟失怎么辦”,在日常操作中,相信很多人在dubbo接口調用過程中,部分字段值丟失怎么辦問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”dubbo接口調用過程中,部分字段值丟失怎么辦”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,南昌縣企業(yè)網(wǎng)站建設,南昌縣品牌網(wǎng)站建設,網(wǎng)站定制,南昌縣網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,南昌縣網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
在工作中,遇到了調用遠程dubbo接口,字段值丟失的情況。排查后,發(fā)現(xiàn)調用前后的代碼無誤,主要原因是在接口調用時使用hessian序列化,出現(xiàn)了子類與父類重復字段,導致字段值丟失。
解決辦法:將父類重復字段刪除即可。
先看下序列化和反序列化的概念:
序列化:把對象轉換為字節(jié)序列的過程稱為對象的序列化。
反序列化:把字節(jié)序列恢復為對象的過程稱為對象的反序列化。
為什么要序列化?
序列化模塊主要為dubbo協(xié)議提供服務提供者和服務消費者之間的數(shù)據(jù)序列化功能。
dubbo是一種適合于高并發(fā)、小數(shù)據(jù)量的互聯(lián)網(wǎng)應用場景的框架,
而序列化對于遠程調用的響應速度,吞吐量,網(wǎng)絡帶寬消耗也其中至關重要的作用,是提高分布式系統(tǒng)性能的最關鍵因素之一。
dubbo框架原生支持四種序列化類型,且與協(xié)議一一對應,性能依次下降,分別為:
dubbo序列化:dubbo框架自身實現(xiàn)的一種Java序列化方案,但是不夠成熟,不建議在生產環(huán)境使用。(二進制序列化)
hessian2序列化(默認):hessian是一種跨語言的高效二進制序列化方式。(二進制序列化),后來新出了一些其他的跨語言序列化方式:Protostuff,ProtoBuf,Thrift,Avro,MsgPack等等
json序列化:目前有兩種實現(xiàn),一種是采用的阿里的fastjson庫,另一種是采用dubbo中自己實現(xiàn)的簡單json庫,但其實現(xiàn)都不是特別成熟,而且json這種文本序列化性能一般不如上面兩種二進制序列化。(文本序列化)
jdk序列化:主要是采用JDK自帶的Java序列化實現(xiàn),性能很不理想。專門針對java語言的序列化方式:Kryo,F(xiàn)ST
使用Kryo和FST非常簡單,只需要在dubbo RPC的XML配置中添加一個屬性即可:
在成為Apache孵化項目之后,對序列化方式進行了優(yōu)化,支持的類型,分別為:fastjson,fst,hessian2,jdk和kryo。
其中fst為完全兼容JDK序列化協(xié)議的序列化框架,序列化速度是JDK的4到10倍,大小是JDK的1/3左右。
kryo序列化速度也比JDK的要快,并且大小是JDK的1/10左右。fst和kryo性能普通好于其他序列化方案,生產環(huán)境比較推薦使用。
常問面試題
1、dubbo 協(xié)議
默認就是走 dubbo 協(xié)議,單一長連接,進行的是 NIO 異步通信,基于 hessian 作為序列化協(xié)議。使用的場景是:傳輸數(shù)據(jù)量小(每次請求在 100kb 以內),但是并發(fā)量很高。
為了要支持高并發(fā)場景,一般是服務提供者就幾臺機器,但是服務消費者有上百臺,可能每天調用量達到上億次!此時用長連接是最合適的,就是跟每個服務消費者維持一個長連接就可以,可能總共就 100 個連接。然后后面直接基于長連接 NIO 異步通信,可以支撐高并發(fā)請求。
長連接,通俗點說,就是建立連接過后可以持續(xù)發(fā)送請求,無須再建立連接。
dubbo-keep-connection
而短連接,每次要發(fā)送請求之前,需要先重新建立一次連接。
dubbo-not-keep-connection
2、rmi 協(xié)議:走 Java 二進制序列化,多個短連接,適合消費者和提供者數(shù)量差不多的情況,適用于文件的傳輸,一般較少用。
3、hessian 協(xié)議:走 hessian 序列化協(xié)議,多個短連接,適用于提供者數(shù)量比消費者數(shù)量還多的情況,適用于文件的傳輸,一般較少用。
4、http 協(xié)議:走 json 序列化。
5、webservice:走 SOAP 文本序列化。
dubbo 支持 hession、Java 二進制序列化、json、SOAP 文本序列化多種序列化協(xié)議。但是 hessian 是其默認的序列化協(xié)議。
Hessian 的對象序列化機制有 8 種原始類型:
原始二進制數(shù)據(jù)
boolean
64-bit date(64 位毫秒值的日期)
64-bit double
32-bit int
64-bit long
null
UTF-8 編碼的 string
另外還包括 3 種遞歸類型:
list for lists and arrays
map for maps and dictionaries
object for objects
還有一種特殊的類型:
ref:用來表示對共享對象的引用。
其實 PB 之所以性能如此好,主要由于以下兩個原因:
1、使用 proto 編譯器,自動進行序列化和反序列化,速度非???,應該比 XML
和 JSON
快上了 20~100
倍;
2、它的數(shù)據(jù)壓縮效果好,就是說它序列化后的數(shù)據(jù)量體積小。因為體積小,傳輸起來帶寬和速度上會有優(yōu)化。
到此,關于“dubbo接口調用過程中,部分字段值丟失怎么辦”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
網(wǎng)站欄目:dubbo接口調用過程中,部分字段值丟失怎么辦
URL地址:http://weahome.cn/article/gcdigo.html