深入理解Apache Dubbo與實戰 pdf


服務的暴露過程

服務器端 ( 服務提供者 ) 在框架啟動時 , 會初始化服務實例 , 通過 Proxy 組件調用具體協議 ( Protocol ),
把服務端要暴露的接口封裝成 Invoker ( 真實類型是AbstractProxylnvoker ) , 然后轉換成 Exporter, 這個時候框架會打開服務端口等並記錄服務實例
到內存中 , 最后通過 Registry 把服務元數據注冊到注冊中心 。 這就是服務端 ( 服務提供者 )整個接口暴露的過程 。

dubbo注冊中心

Dubbo 主要包含四種注冊中心的實現 , 分別是ZooKeeper,Redis,Simple,Multicast

工作流程

  • 服務提供者啟動時,會向注冊中心寫入自己的元數據信息,同時會訂閱配置元數據信息 。

  • 消費者啟動時,也會向注冊中心寫入自己的元數據信息,並訂閱服務提供者,路由和配置元數據信息

  • 服務治理中心(dubbo-admin)啟動時,會同時訂閱所有消費者、服務提供者、路由和配置元數據信息

  • 當有服務提供者離開或有新的服務提供者加入時,注冊中心服務提供者目錄會發生變化,變化信息會動態通知給消費者,服務治理中心

  • 當消費方發起服務調用時,會異步將調用 、 統計信息等上報給監控中心

  • Dubbo 使用 ZooKeeper 作為注冊中心時,只會創建持久節點和臨時節點兩種,對創建的順序並沒有要求

  • 目錄示例:

  • 客戶端訂閱: 客戶端第一次連上注冊中心 , 訂閱時會獲取全量的數據 , 后續則通過監聽器事件進行更新

  • ZooKeeper的每個節點都有一個版本號,當某個節點的數據發生變化(即事務操作)時 ,
    該節點對應的版本號就會發生變化,並觸發 watcher 事件,推送數據給訂閱方。版本號強調的
    是變更次數,即使該節點的值沒有變化,只要有更新操作,依然會使版本號變化

dubbo擴展點加載機制

javaSPI

具體步驟:
1.定義一個接口和對應的方法
2.編寫接口的實現類
3.在META-INF/services/目錄下,創建一個以接口全路徑命名的文件
4.文件內容為具體實現類的全路徑名
5.在代碼中通過java.util.ServiceLoader來加載具體的實現類




Dubbo對java的spi機制進行了改進


在DubboSPI中,我們使用@Adaptive注解,可以動態地通過URL中的參數來確定要使用哪個具體的實現類

ExtensionLoader工作流程

這個類實現了配置的加載,擴展類緩存,自適應對象生成

ExtensionLoader的邏輯入口可以分為getExtension、getAdaptiveExtension、getActivateExtension 三個
分別是獲取普通擴展類、獲取自適應擴展類、獲取自動激活的擴展類



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM