從微博motan看rpc基於netty4遠程通訊設計5-協議編解碼與序列化
微信公眾號:winter分享匯
如有問題或建議,請公眾號留言
從微博motan看rpc基於netty4遠程通訊設計5-協議編解碼與序列化
本系列文章-連載中
請求報文處理
motan v2版本請求報文內容
根據上面的報文內容,我們想一個問題,消費者遠程調用提供者,怎麼找到提供者的介面並執行?
我們看請求傳入的幾個參數:介面名,方法名,參數描述,參數
比如ITest介面定義了testMethod方法
String testMethod(int num, Integer numTeger, String str, int[] array, TestObj obj, TestObj[] objArray);
那麼在對應的請求內容應該是
介面名:com.test.motan.ITest
方法名:testMethod
參數描述:int,java.lang.Integer,java.lang.String,int[],com.test.motan.TestObj,com.test.motan.TestObj[]
參數:序列化後二進位數組
服務端提供者初始化暴漏服務會把介面封裝成Provider,每個Provider會用map緩存提供者介面的所有方法
key為完整方法名跟參數描述,value為Method對象,比如:
ITest介面定義了testMethod方法,對應的key就是
testMethod(int,java.lang.Integer,java.lang.String,int[],com.test.motan.TestObj,com.test.motan.TestObj[])
value 就是Method。
暴漏服務的時候還會把Provider緩存在map緩存裡面,key為完整介面名(比如:com.test.motan.ITest),value為Provider對象
服務端接收到消息後根據介面名稱找到Provider,再找到對應的Method,然後執行方法回調
通過上面分析我們知道序列化的只是報文主體即方法參數,motan提供了Serialization介面來做不同的序列化,有FastJsonSerialization,Hessian2Serialization等
另外有個小技巧,motan發送字元串的時候,比如介面名,方法描述,通過結尾追加回車符來分割,方便報文解析
響應報文處理
motan v2版本響應報文內容
提供者處理完業務消息響應的時候報文主體是把介面返回對象做序列化
下一篇:從微博motan看rpc基於netty4遠程通訊設計6-集群與負載均衡
下面的是我的公眾號二維碼圖片,歡迎關注我。
圖注:winter分享匯
TAG:全球大搜羅 |