服務提供者暴露一個服務的詳細過程
首先ServiceConfig類拿到對外提供服務的實際類ref(如:HelloWorldImpl),而後經過ProxyFactory類的getInvoker方法使用ref生成一個AbstractProxyInvoker實例,到這一步就完成具體服務到Invoker的轉化。接下來就是Invoker轉換到Exporter的過程。
Dubbo處理服務暴露的關鍵就在Invoker轉換到Exporter的過程(如上圖中的紅色部分)。 Dubbo協議的Invoker轉爲Exporter發生在DubboProtocol類的export方法,它主要是打開socket偵聽服務,並接收客戶端發來的各類請求,通信細節由Dubbo本身實現。
各類註冊中心的實現
各類協議的實現
將服務註冊到zookeeper
服務消費者消費一個服務的詳細過程
首先ReferenceConfig類的init方法調用Protocol的refer方法生成Invoker實例(如上圖中的紅色部分),這是服務消費的關鍵。接下來把Invoker轉換爲客戶端須要的接口(如:HelloWorld)。這裏獲取invoker的時候,若是是註冊中心同一個服務有多個提供者,消費者會根據配置的負載均衡來選擇出一個做爲提供者來使用。而且也有各類容錯處理機制。
消費端各類容錯機制
消費端各類負載均衡機制
使用RandomLoadBalance獲取一個提供者