Dubbo客戶端原理

服務請求的基本原理

1、client一個線程調用遠程接口,生成一個唯一的ID,Dubbo是使用AtomicLong從0開始累計數字。

2、將打包的方法調用信息和處理結果的回調對象callback,全部封裝在一起,組成一個對象。

3、向全局ConcurrentHashMap裏面put(ID, object)。

4、將ID和打包的方法調用信息封裝成一對象connRequest,使用IoSession.write(connRequest)異步發送出去。

5、當前線程再使用callback的get()方法試圖獲取遠程返回的結果,在get()內部,則使用synchronized獲取回調對象callback的鎖, 再先檢測是否已經獲取到結果,如果沒有,然後調用callback的wait()方法,釋放callback上的鎖,讓當前線程處於等待狀態。

6、服務端接收到請求並處理後,將結果(此結果中包含了前面的ID,即回傳)發送給客戶端,客戶端socket連接上專門監聽消息的線程收到消息,分析結果,取到ID,再從前面的ConcurrentHashMap裏面get(ID),從而找到callback,將方法調用結果設置到callback對象裏。

7、監聽線程接着使用synchronized獲取回調對象callback的鎖,再notifyAll(),喚醒前面處於等待狀態的線程繼續執行。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章