源碼的解析在官網都已經寫的非常詳細,可以參考:http://dubbo.io/Developer+Guide-zh.htm
服務提供者暴露一個服務的詳細過程


首先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獲取一個提供者
