1. 程式人生 > >dubbo與zookeeper的互動-1

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

ZookeeperRegistryFailbackRegistry的實現類,對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,就會獲得由註冊中心獲得的所有服務資訊的推送