duboo架構學習

Dubbo學習鏈接 http://blog.csdn.net/quhongwei_zhanqiu/article/details/41577159

1、Dubbo與Spring的整合 Dubbo在使用上可以做到非常簡單,不管是Provider還是Consumer都可以通過Spring的配置文件進行配置,配置完之後,就可以像使用 spring bean一樣進行服務暴露和調用了,完全看不到dubbo api的存在。這是因爲dubbo使用了spring提供的可擴展Schema自定義配置支持。在spring配置文件中,可以像、這樣進行配置。 META-INF下的spring.handlers文件中指定了dubbo的xml解析類:DubboNamespaceHandler。像前面的被解 析成ServiceConfig,被解析成ReferenceConfig等等。 2、jdk spi擴展 由於Dubbo是開源框架,必須要提供很多的可擴展點。Dubbo是通過擴展jdk spi機制來實現可擴展的。具體來說,就是在META-INF目錄下,放置文件名爲接口全稱,文件中爲key、value鍵值對,value爲具體實現類 的全類名,key爲標誌值。由於dubbo使用了url總線的設計,即很多參數通過URL對象來傳遞,在實際中,具體要用到哪個值,可以通過url中的參 數值來指定。 Dubbo對spi的擴展是通過ExtensionLoader來實現的,查看ExtensionLoader的源碼,可以看到Dubbo對jdk spi做了三個方面的擴展:
(1)jdk spi僅僅通過接口類名獲取所有實現,而ExtensionLoader則通過接口類名和key值獲取一個實現;
(2)Adaptive實現,就是生成一個代理類,這樣就可以根據實際調用時的一些參數動態決定要調用的類了。
(3)自動包裝實現,這種實現的類一般是自動激活的,常用於包裝類,比如Protocol的兩個實現類:ProtocolFilterWrapper、ProtocolListenerWrapper。 3、url總線設計 Dubbo爲了使得各層解耦,採用了url總線的設計。我們通常的設計會把層與層之間的交互參數做成Model,這樣層與層之間溝通成本比較大,擴展起來也比較麻煩。因此,Dubbo把各層之間的通信都採用url的形式。比如,註冊中心啓動時,參數的url爲: registry://0.0.0.0:9090?codec=registry&transporter=netty 這就表示當前是註冊中心,綁定到所有ip,端口是9090,解析器類型是registry,使用的底層網絡通信框架是netty。
 二、Dubbo啓動過程
Dubbo分爲註冊中心、服務提供者(provider)、服務消費者(consumer)三個部分。 1、註冊中心啓動過程 註冊中心的啓動過程,主要看兩個類:RegistrySynchronizer、RegistryReceiver,兩個類的初始化方法都是start。 RegistrySynchronizer的start方法:
(1)把所有配置信息load到內存;
(2)把當前註冊中心信息保存到數據庫;
(3)啓動5個定時器。 5個定時器的功能是: (1)AutoRedirectTask,自動重定向定時器。默認1小時運行1次。如果當前註冊中心的連接數高於平均值的1.2倍,則將多出來的連接數重定向到其他註冊中心上,以達到註冊中心集羣的連接數均衡。 (2)DirtyCheckTask,髒數據檢查定時器。作用是:分別檢查緩存provider、數據庫provider、緩存consumer、數據庫 consumer的數據,清除髒數據;清理不存活的provider和consumer數據;對於緩存中的存在的provider或consumer而數 據庫不存在,重新註冊和訂閱。 (3)ChangedClearTask,changes變更表的定時清理任務。作用是讀取changes表,清除過期數據。 (4)AlivedCheckTask,註冊中心存活狀態定時檢查,會定時更新registries表的expire字段,用以判斷註冊中心的存活狀態。如果有新的註冊中心,發送同步消息,將當前所有註冊中心的地址通知到所有客戶端。 (5)ChangedCheckTask,變更檢查定時器。檢查changes表的變更,檢查類型包括:參數覆蓋變更、路由變更、服務消費者變更、權重變更、負載均衡變更。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章