首先服務發布初始化bean,hsfspringproviderbean實現了spring的3個介面,將hsf的publish和spring容器的生命週期繫結在一起。
1)initializingbean,實現afterpropertiesset介面,在init方法之前呼叫,執行服務發布的初始化資訊
@override
public void afterpropertiesset() throws exception
首先看,init方法,
public從**中很明顯的看到服務發布providerbean.publish(),先來看大致類圖,類圖中有些不是很關鍵的先省略了:void init() throws
exception
loggerinit.inithsflog();
spasinit.initspas();
providerbean.checkconfig();
publishifnotinspringcontainer();
}private
void
publishifnotinspringcontainer()
整個服務發布的流程,歸納如下:
服務的訂閱流程:
@overridepublic object getobject() throws
exception
public object getobject() throwshsfspringconsumerbean的init方法呼叫了consumerbean(hsfapiconsumerbean)的init方法,我們來看consumerbean裡init方法的某一段**:exception
processservice processservice = hsfservicecontainer.getinstance(processservice.class儲存客戶端metadata到redis,返回target。);try
catch
(exception e)
int waittime =metadata.getmaxwaittimeforcsaddress();
if (waittime > 0)
catch
(interruptedexception e)
}
服務資訊已經註冊發布,客戶端也獲取到了服務的呼叫位址,接下去就是呼叫就行,呼叫就是真正的rpc請求了,hsf的rpc是通過netty實現的。
當服務消費方發起呼叫時,對**物件的呼叫,都會觸發到hsfserviceproxy的invoke方法,該方法是服務呼叫的入口方法,invoke會呼叫trueinvoke方法:
provider端啟動乙個nettyserver用於接收請求,那麼一次請求的處理就是從nettyserver收到請求開始的。在nettyserver的start**中,註冊了乙個serverhandler,用來處理客戶端的請求。
在呼叫syncinvokecomponent的invoke方法中,使用future.get獲取呼叫結果,getresponseobject方法負責從返回物件中解析結果。
過程後續慢慢補充。。。。
《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具
檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...
原始碼閱讀 Glide原始碼閱讀之with方法(一)
前言 本篇基於4.8.0版本 原始碼閱讀 glide原始碼閱讀之with方法 一 原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 大多數情況下,我們使用glide 就一句 但是這一句 裡面蘊含著成噸的 with方法有以下幾個過載方法 publi...
原始碼閱讀 Glide原始碼閱讀之load方法(二)
原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 首先,load方法有以下幾個過載方法 public requestbuilder load nullable bitmap bitmap public requestbuilder load nu...