Dubbo源碼分析(四)----Zookeeper註冊中心

本篇Dubbo版本是2.7.3.Release. 此次是接着上次服務Export過程,其中服務提供者是怎麼註冊的呢? 首先ServiceBean中調用Protocol調用export過程,Protocol是調用SPI加載的機制,進行服務導出的. api

因爲Dubbo的SPI機制,ProtocolListenerWrapper是Protocol擴展的包轉類(便是構造函數傳入的是Protocol類型參數),ProtocolListenerWrapper是默認激活的,這個知識點是在前面介紹Dubbo的SPI機制詳細介紹過.
這裏dubbo-rpc-api.jar包裏META/dubbo/internal下配置ProtocolFilterWrapper和ProtocolListenerWrapper是Protocol下是Protocol的包裝類,這個兩個會默認執行.
從圖能夠看到ProtocolFilterWrapper注入的是RegistryProtocol這個對象,這個是實現服務註冊的核心邏輯. 這是RegistryProtocol的export方法的邏輯, 主要是調用register方法進行服務註冊
這裏registryFactory是SPI的擴展點,這裏以zookeeper註冊中心爲例,實際建立的對象是ZookeeperRegistryFactory對象.而後獲取registry對象是ZookeeperRegistry.接着調用register方法進行註冊.
這個register方法是的ZookeeperRegistry父類FailbackRegistry的方法,
doRegister纔是ZookeeperRegistry子類實現的父類的模板方法,經過zkClient去建立動態的配置, 註冊的服務信息(包含服務的IP和端口以及接口類)都是在Zookeeper建立臨時節點, 當服務與zkClient與zookeeper保持的心 跳後,這個註冊的元信息也會從zookeeper上消失,也就是服務下線.
zkClient是默認擴展點CuratorZookeeperTransporter調用connect返回的實際對象是CuratorZookeeperClient,經過Curator這個Client向zookeeper進行操縱的.

總結
今天分析服務導出的過程,向服務註冊中心註冊的過程分析,本篇以zookeeper爲例, 分析了註冊的過程.markdown