dubbo與zookeeper的互動-1
dubbo-admin學習總結:
dubbo能從zookeeper註冊中心獲得服務資訊,是通過registryService,並且可以通過registryService對dubbo進行操作
詳解:
與服務註冊相關的類:
RegistryService:頂層介面
Registry:介面,繼承頂層介面 與Node介面(暫不知何用)
AbstractRegistry:抽象類,實現registry介面,在建構函式中載入dubbo本地配置檔案的內容./dubbo/dubbo-reditry-xxxx.cache
FailbackRegistry:抽象類,繼承AbstractRegistry,有很多實現類
ZookeeperTransporter:介面,定義了連線註冊中心的方法
ZkclientZookeeperTransporter:實現介面ZookeeperTransporter
ZookeeperRegistry:FailbackRegistry的實現類,對url進行操作的實現類,初始化時有兩個引數,url和ZookeeperTransporter,在建立時完成對註冊中心的連線返回ZookeeperClient,最終完成最註冊中心操作的實現類
URL:各種路徑的實體類,封裝了protocol(協議型別),path(service路徑),port(ip和埠)parameter(引數如組名、型別等)等引數。
RegistryServerSync:快取,註冊中心內的服務的快取,實現了介面NotifyListener,實現的的notify(List<url>)方法,能夠接受zookeeper的方向推送內容
dubbo-admin服務在啟動的時候,會讀取配置檔案中dubbo標籤的配置,生成url物件底層呼叫ZookeeperRegistry去連線註冊中心,同時呼叫RegistryServerSync的subscribe(url,lictener)監聽所有的服務,同時該類實現的notify方法,能夠在zookeeper註冊中心資訊變化是接受註冊中心額資訊的推送,將zookeeper中心的註冊資訊儲存在自定義的map集合中,當對服務進行查詢時,都從快取中查詢。
快取Map的例項:ConcurrentMap<String, ConcurrentMap<String, Map<Long, URL>>>:服務類別(providers或者consumers),Map
ConcurrentMap<String, Map<Long, URL>>: serviceKey(每一個服務的service都有按照規則合成的key),Map
Map<Long, URL> :service對應的id及url
dubbo-admin在註冊服務時,用來監聽所有服務的監聽器即:RegistryServerSync,就會獲得由註冊中心獲得的所有服務資訊的推送