分散式服務架構之Hessian原理分析(一)
阿新 • • 發佈:2018-12-26
使用HessianServiceExporter向外暴露服務,接收請求:
HessianServiceExporter接收到請求後通過呼叫handleRequest的invoke進一步執行請求:
在invoke中,拿到請求的Servlet InputStream檢索請求體作為二進位制資料,返回資料也是一個適合在響應中寫入二進位制資料的Servlet Output Stream。servlet容器不對二進位制資料進行編碼。
invoke()繼續執行呼叫:
將InputStream進一步轉換為底層的Hessian2Input,然後再進行序列化
in.setSerializerFactory(this.serializerFactory);
out.setSerializerFactory(this.serializerFactory);
之後繼續執行:
skeleton.invoke(in, out);到HessianSkeleton類中:
String methodName = in.readMethod();拿到請求流中的請求介面方法名稱,因此在寫客戶端介面時,方法名應當與服務端介面方法名一致。
進一步執行:
result = method.invoke(service, values)最終處理請求,並out.writeReply(result),這樣請求執行完成。
Hessian客戶端執行流程:
一、通過建立Hessian代理工廠HessianProxyFacotry
create建立HessianProxyFacotry
通過Hessian代理工廠判斷並執行呼叫遠端介面。