dubbo實現原理---源碼分析

DUBBO 加載

spring加載bean的時候,遇到dubbo的命名空間時,會調用DubboNamespaceHandler類。執行init方法。將dubbo標籤的各類子標籤如service,reference存到一個叫parsers的HashMap中。

clipboard.png

clipboard.png

DUBBO標籤的解析

全部經過標籤訂義的bean 都會定義成BeanDefinition。而且存到BeanDefinitionMap中

clipboard.png

clipboard.png

service標籤,provide標籤,consumer標籤的識別都是用if判斷的。

clipboard.png

如今有兩個map。一個spring初始化產生的存有dubbo各類子標籤類型對應的解析器的parsers另外一個是存有解析到的beandefintion的beandefinitionMap。dubbo內部中必定存在一個方法從parsers中拿到解析器。而後經過這個解析器解析bean。存到beandefinitionmap中。可是我沒找到

僅僅只是這樣還不能實現rpc調用

dubbo底層是經過在ServiceConfig.export 或者ReferenceConfig.get 初始化時,將Bean對象轉會爲url格式,將全部Bean屬性轉成url的參數。 生成url來實現的
以ServiceConfig.export方法爲例。因爲if語句佔據了大量篇幅,直接截圖核心部分

clipboard.png

clipboard.png

clipboard.png

以上是本地暴露

向註冊中心暴露服務:

和上一種的區別:須要將服務的IP和端口一同暴露給註冊中心。
ServiceConfig解析出的url格式爲:registry://registry-host/com.alibaba.dubbo.registry.RegistryService?export=URL.encode(url)

引用服務,

主要是用ReferenceConfig.init()。

clipboard.png

該方法的一大部分都是在拆解url。最終調用refer方法。獲得invoker。

clipboard.png

clipboard.png

相關文章
相關標籤/搜索