服務的發佈過程使用通訊功能:
Protocol.export()時會爲每一個服務建立一個Serversocket
上圖是服務提供者暴露服務的主過程:.net
首先ServiceConfig類拿到對外提供服務的實際類ref(如:HelloWorldImpl),而後經過ProxyFactory類的getInvoker方法使用ref生成一個AbstractProxyInvoker實例,到這一步就完成具體服務到Invoker的轉化。接下來就是Invoker轉換到Exporter的過程。代理
Dubbo處理服務暴露的關鍵就在Invoker轉換到Exporter的過程(如上圖中的紅色部分),Dubbo協議的Invoker轉爲Exporter發生在DubboProtocol類的export方法,它主要是打開socket偵聽服務,並接收客戶端發來的各類請求,通信細節由Dubbo本身實現。blog
服務的引用過程使用通訊功能:
Protocol.refer()時會建立一個Client接口
上圖是服務消費的主過程:get
首先ReferenceConfig類的init方法調用Protocol的refer方法生成Invoker實例(如上圖中的紅色部分),這是服務消費的關鍵。接下來把Invoker經過ProxyFactory代理工廠轉換爲客戶端須要的接口(如:HelloWorld)。it
(參考:https://blog.csdn.net/qq418517226/article/details/51848988)引用
(參考:https://blog.csdn.net/qq418517226/article/details/51834127)請求
(參考:https://blog.csdn.net/qq418517226/article/details/51818769)方法