dubbo實現原理---源碼分析
DUBBO 加載
spring加載bean的時候,遇到dubbo的命名空間時,會調用DubboNamespaceHandler類。執行init方法。將dubbo標籤的各類子標籤如service,reference存到一個叫parsers的HashMap中。
DUBBO標籤的解析
全部經過標籤訂義的bean 都會定義成BeanDefinition。而且存到BeanDefinitionMap中
service標籤,provide標籤,consumer標籤的識別都是用if判斷的。
如今有兩個map。一個spring初始化產生的存有dubbo各類子標籤類型對應的解析器的parsers另外一個是存有解析到的beandefintion的beandefinitionMap。dubbo內部中必定存在一個方法從parsers中拿到解析器。而後經過這個解析器解析bean。存到beandefinitionmap中。可是我沒找到
僅僅只是這樣還不能實現rpc調用
dubbo底層是經過在ServiceConfig.export 或者ReferenceConfig.get 初始化時,將Bean對象轉會爲url格式,將全部Bean屬性轉成url的參數。 生成url來實現的
以ServiceConfig.export方法爲例。因爲if語句佔據了大量篇幅,直接截圖核心部分
以上是本地暴露
向註冊中心暴露服務:
和上一種的區別:須要將服務的IP和端口一同暴露給註冊中心。
ServiceConfig解析出的url格式爲:registry://registry-host/com.alibaba.dubbo.registry.RegistryService?export=URL.encode(url)
引用服務,
主要是用ReferenceConfig.init()。
該方法的一大部分都是在拆解url。最終調用refer方法。獲得invoker。
歡迎關注本站公眾號,獲取更多信息