dubbo源碼淺析-服務消費(用戶端接收處理)
-
-
- 分析入口
- 流程分析
- 流程總結
-
- 用戶端接收相關線程狀态
-
服務消費的最後一步,用戶端接收服務端傳回資訊并進行相應的處理。
分析入口
- 同服務端接收一樣,即NettyCodecAdapter内部類InternalDecoder#messageReceived,最終交給業務處理handler(NettyHandler)
流程分析
接收到服務端發送來的消息流程和上篇-服務端接收處理一緻
- 在DecodeHandler#received()執行過程中有不同 message是Response類型。
- HeaderExchangeHandler#received()
- 調用DefaultFuture#received處理 之後的流程在服務消費-用戶端發送以及分析過。大概邏輯就是從FUTURES中拿到DefaultFuture對象,指派給response,喚醒業務線程進行業務處理并傳回。
流程總結
用戶端接收傳回資料時和服務端接收基本一緻,具體的處理流程是派發(根據具體的Dispatcher模式)到線程池去處理,利用future模式進行線程間的通信,将處理結果傳回給調用方。
用戶端接收相關線程狀态
Dispatcher為all模式下,服務消費過程大緻分為兩次線程變更,第一次是從io線程變更至用戶端線程池(派發),第二次是從線程池變更至調用服務的線程(線程池執行任務将執行結果送至DefaultFuture中,喚醒調用線程)。
下集預告:編解碼