天天看點

11. Dubbo原了解析-注冊中心之接口介紹

服務注冊與發現的中心,服務的提供者将服務釋出到注冊中心,服務的使用着到注冊中引用服務。

Dubbo的注冊中心提供了多種實作,其實作是基于dubbo的spi的擴充機制的,使用着可以直接實作自己的注冊中心。

@SPI("dubbo")

public interface RegistryFactory {

    @Adaptive({"protocol"})

    RegistrygetRegistry(URL url);

}

11. Dubbo原了解析-注冊中心之接口介紹

RegistryFactory用來建立注冊中心, 預設的注冊中心是dubbo協定,由于阿裡的注冊中心并沒有開源,dubbo協定注冊中心隻提供了一個簡單實作。 開源dubbo的注冊中心推薦使用zookeeper。這裡我們主要去分析基于dubbo和zookeeper協定的注冊中心實作及使用。

注冊中心服務類圖:

11. Dubbo原了解析-注冊中心之接口介紹

服務接口定義

public interface RegistryService {

    void register(URL url);

    void unregister(URL url);

    void subscribe(URL url, NotifyListener listener);

    void unsubscribe(URL url, NotifyListener listener);

List<URL> lookup(URL url);

}

Register:注冊資料,比如:提供者位址,消費者位址,路由規則,覆寫規則,等資料。

注冊需處理契約

     1. 當URL設定了check=false時,注冊失敗後不報錯,在背景定時重試,否則抛出異常。

     2. 當URL設定了dynamic=false參數,則需持久存儲,否則,當注冊者出現斷電等情況異常退出時,需自動删除。

     3. 當URL設定了category=routers時,表示分類存儲,預設類别為providers,可按分類部分通知資料。

     4. 當注冊中心重新開機,網絡抖動,不能丢失資料,包括斷線自動删除資料。

     5. 允許URI相同但參數不同的URL并存,不能覆寫。

Unregister:取消注冊

Subscribe:訂閱符合條件的已注冊資料,當有注冊資料變更時自動推送

訂閱需處理契

     1. 當URL設定了check=false時,訂閱失敗後不報錯,在背景定時重試。

     2. 當URL設定了category=routers,隻通知指定分類的資料,多個分類用逗号分隔,并允許星号通配,表示訂閱所有分類資料。

     3. 允許以interface,group,version,classifier作為條件查詢,如:interface=com.alibaba.foo.BarService&version=1.0.0

     4. 并且查詢條件允許星号通配,訂閱所有接口的所有分組的所有版本,或:interface=*&group=*&version=*&classifier=*

     5. 當注冊中心重新開機,網絡抖動,需自動恢複訂閱請求

     6. 允許URI相同但參數不同的URL并存,不能覆寫

     7. 必須阻塞訂閱過程,等第一次通知完後再傳回。

Unsubscribe:取消訂閱

Lookup: 查詢符合條件的已注冊資料,與訂閱的推模式相對應,這裡為拉模式,隻傳回一次結果

繼續閱讀