Curator之PathChildrenCache的那些坑

好久沒來了,一是在研究Zookeeper沒時間,二是個人感覺沒啥乾貨。


zookeeper號稱是最好的配置管理服務器,最近平臺準備將集羣的配置信息遷移到上面,做成無狀態集羣。

其客戶端基本都使用Curator作爲包裝,簡便使用。

Curator能操作選舉、分佈式鎖、服務發現、節點變動監聽等非常簡便的操作。

目前想法是集羣中每個節點啓動時,都註冊到ZKServer上,然後每個節點都接收節點改變的監聽,以便每個節點都實時更新集羣信息(其他應用要使用)

監聽使用PathChildrenCache,能監聽當前目錄+子節點。

我的操作流程是:

節點啓動時,首先初始化ZK上的節點信息,並且判斷相關節點是否失效(ZK默認30秒才失效,而我的服務器可能在30秒內再次啓動,導致Session節點在啓動後失聯,每次判斷失效都要刪除原來的session節點)。

這個過程,不能發送監聽事件,因爲可能爲頻繁刪除,導致過多事件。

當時以爲PathChildrenCacheListner的start時,纔會監聽之後的數據,結果數據混亂,沒有規律,明顯我只改動一個節點,卻發送多個節點改變的事件。

查了半天才發現,是PathChildrenCache的start需要傳入參數,如果不傳,則初始會把監聽節點的所有存在的節點都作爲節點改變,發出事件

WTF

增加傳入參數PathChildrenCache.StartMode.BUILD_INITIAL_CACHE後,問題解決

看來,仔細研究原API、相關例子很重要。。。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章