天天看點

dubbo源碼淺析-服務消費(用戶端接收處理)

dubbo源碼淺析-服務消費(用戶端接收處理)

      • 分析入口
      • 流程分析
      • 流程總結
        • 用戶端接收相關線程狀态

服務消費的最後一步,用戶端接收服務端傳回資訊并進行相應的處理。

分析入口

  • 同服務端接收一樣,即NettyCodecAdapter内部類InternalDecoder#messageReceived,最終交給業務處理handler(NettyHandler)
    dubbo源碼淺析-服務消費(用戶端接收處理)

流程分析

接收到服務端發送來的消息流程和上篇-服務端接收處理一緻

  • 在DecodeHandler#received()執行過程中有不同
    dubbo源碼淺析-服務消費(用戶端接收處理)
    message是Response類型。
  • HeaderExchangeHandler#received()
    dubbo源碼淺析-服務消費(用戶端接收處理)
  • 調用DefaultFuture#received處理
    dubbo源碼淺析-服務消費(用戶端接收處理)
    dubbo源碼淺析-服務消費(用戶端接收處理)
    之後的流程在服務消費-用戶端發送以及分析過。大概邏輯就是從FUTURES中拿到DefaultFuture對象,指派給response,喚醒業務線程進行業務處理并傳回。

流程總結

用戶端接收傳回資料時和服務端接收基本一緻,具體的處理流程是派發(根據具體的Dispatcher模式)到線程池去處理,利用future模式進行線程間的通信,将處理結果傳回給調用方。

用戶端接收相關線程狀态

dubbo源碼淺析-服務消費(用戶端接收處理)
dubbo源碼淺析-服務消費(用戶端接收處理)
dubbo源碼淺析-服務消費(用戶端接收處理)

Dispatcher為all模式下,服務消費過程大緻分為兩次線程變更,第一次是從io線程變更至用戶端線程池(派發),第二次是從線程池變更至調用服務的線程(線程池執行任務将執行結果送至DefaultFuture中,喚醒調用線程)。

下集預告:編解碼

繼續閱讀