dubbo之zookeeper註冊中心

2021-09-09 05:58:57 字數 1755 閱讀 4410

前面分析了使用redis作為註冊中心的** dubbo之redis註冊中心

我們來看一下官方最推薦生產環境使用的zookeeper~

zookeeper是乙個分布式的,開放原始碼的分布式應用程式協調服務,是google的chubby乙個開源的實現,是hadoop和hbase的重要元件。它是乙個為分布式應用提供一致性服務的軟體,提供的功能包括:配置維護、網域名稱服務、分布式同步、組服務等。

zookeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的介面和效能高效、功能穩定的系統提供給使用者。

作為註冊中心我們還是要能夠快速無誤的獲取到服務的上下線資訊 對於zookeeper不要太簡單

zookeeper提供了watch

znode 發生變化(znode 本身的增加,刪除,修改,以及子 znode 的變化)可以通過 watch 機制通知到客戶端。那麼要實現 watch,就必須實現 org.apache.zookeeper.watcher 介面,並且將實現類的物件傳入到可以 watch 的方法中。zookeeper 中所有讀操作(getdata(),getchildren(),exists())都可以設定 watch 選項。watch 事件具有 one-time trigger(一次性觸發)的特性,如果 watch 監視的 znode 有變化,那麼就會通知設定該 watch 的客戶端。

這個就是相當方便了~作為服務消費者我們需要做的就是監聽到服務提供者的節點 對應的change事件收到即可!

protected void dosubscribe(final url url, final notifylistener listener)  else 

childlistener zklistener = listeners.get(listener);

if (zklistener == null)

});zklistener = listeners.get(listener);

}zkclient.create(path, false);

listchildren = zkclient.addchildlistener(path, zklistener);

if (children != null)

}notify(url, listener, urls);

}} catch (throwable e)

}

我們只需要在對應的節點增加監聽即可~

dubbo通過自定義的childlistener適配到多個不同的zk客戶端~

很明顯這樣就完成關於服務上下線的監聽

我們需要注意的是zkclient建立了節點 其中節點呼叫了如下方法 

zkclient.create(path, false);
這邊會建立多個節點 【主要指需要訂閱通知的】包括providers  這邊的false表示為持久節點

我們來看一下如何註冊

protected void doregister(url url)  catch (throwable e) 

}

這邊可以看到會根據是否動態建立對應的節點 一般情況下該節點為臨時節點

ephemeral節點在客戶端session結束或超時後自動刪除

因此當服務下線或者未正常下線【比如超時 網路分割槽等】

這樣該節點將會被移除掉 

因此進行監聽節點的將會受到nodechanged事件~從而獲得最新的服務列表等

zookeeper 和 dubbo的使用

專案最近做成了分布式的 用zookeeper 註冊管理服務,使用dubbo做分布式開發。1 使用zookeeper和dubbo需要引入的包 com.github.sgroschupf zkclient 0.1org.apache.zookeeper zookeeper 3.4.6 com.aliba...

Dubbo是如何整合Zookeeper

zookeeper作為生產環境比較穩定可靠的目錄服務元件,在各種分布式環境中提供了廣泛的應用,譬如在metaq dubbo redis分布式集群中,作為服務註冊中心使用,本篇主要講述一下dubbo是如何整合zk的,不涉及zk實現原理。1 抽象,類圖如下 這裡的抽象過程實際上可以在以後的開發中參考借鑑...

zookeeper和dubbo的關係

在讀一下文字之前 可以先看一下這篇文章 dubbo建議使用zookeeper作為服務的註冊中心。1.zookeeper的作用 zookeeper用來註冊服務和進行負載均衡,哪乙個服務由哪乙個機器來提供必需讓呼叫者知道,簡單來說就是ip位址和服務名稱的對應關係。當然也可以通過硬編碼的方式把這種對應關係...