1. 程式人生 > >dubbo呼叫原理,過程(知其然,知其所以然)

dubbo呼叫原理,過程(知其然,知其所以然)

簡介:

前提是對NIO與zookpper有一定的理解

  • 1. dubbo暴露服務過程

duboo是用NIO非同步通訊的(不懂NIO自己去查,就知道dubbo為什麼使用NIO,而不用IO了)。provider服務啟動時候,在zookeeper註冊節點處理請求,將結果返回給客戶端。消費者在使用的時候,主要是訂閱zookpeer節點,並對zookpper進行監聽,provider有變化,zookeeper會推送給呼叫方,呼叫方重新快取服務資訊。服務方,消費方,zookpper三者之間都是長連線。

  1. 2.dubbo遠端呼叫過程
  • client發出請求之後,會生成一個請求ID,requestID(唯一的,類似UUID),dubbo預設從0開始累加
  • 將呼叫方法資訊打包(介面名稱,方法名,引數),和處理結果回撥物件callback,封裝在一起組成一個物件object
  • 將呼叫資訊放到Map裡面map.put(ID,object)
  • 將ID和object組成一個connrequest物件,通過非同步傳送出去IOsession.write(connrequest)
  • 客戶端從callbakc中獲取服務端返回資料,若是獲取不到,就呼叫wait方法,使執行緒處於等待狀態
  • 伺服器端首都請求處理之後,將結果返回和ID一起返回,客戶端監聽執行緒,監聽服務端資料返回的,客戶端監聽到資料返回之後,通過ID,獲取callback,將服務端返回的資料放到callback中
  • 這時候callback中有返回資料,客戶端處於等待的執行緒被喚醒,從callback中通過get()方法獲取服務端資料,至此整個過程基本就結束了(callback每次呼叫都會產生一個新的,不能共享)

(歡飲評論指正)