dubbo專題-深入淺出zookeeper訂閱原理
進行了解析.知道dubbo會對zookeeper的資訊進行一個本地的檔案快取.如果你只是簡單的回答出這個本地的檔案快取,可能面試官會點到為止,但是如果你按照我那樣從原始碼角度分析,甚至連快取到哪個磁碟檔案都一清二楚,那麼面試官必然會根據這個問題深入問下去.既然要深入問下去,那他會從哪個角度問呢?
比如公司新來了妹子,老司機們在下班的時候總會套路一下,問她們你男朋友怎麼不接你下班啊.這個時候妹子的回答往往也就兩個,一個是我沒有男朋友啊,另一個是他忙啊(這說明她有男朋友).從這裡例子就可以很容易看出,你的發言,對對方的回答我們是能一定程度預判的.再比如,我一直自稱肥朝,假如你發現我其實沒有你想的那麼肥,按照正常的思維你就會問我,既然你沒這麼肥為什麼要叫肥朝.這再次說明了,對方的提問,我們是可預判的.
同理可得,你回答了會快取本地檔案,並且連目錄都一清二楚,那他如果照著這個問題深入問下去,他可能會問什麼呢?可能會問,既然是快取,那麼自然會存在和實時資料不同步,那麼他是什麼時候去更新這個快取?鑑於你前面回答得這麼透徹,可能還會加上一句,他這個更新的過程是怎麼樣的?能畫圖給我講一下嗎?
當然看到這裡你可能會反駁,萬一他不按套路出牌,或者我回答了這個問題他又繼續深入問下去,那可咋整?其實坦白說,雖然我原始碼解析以面試題為切入,但是我在dubbo原始碼解析-zookeeper建立節點中也提到了,看原始碼並不是以面試為最終目的.因此,簡書上關注肥朝,每週一篇dubbo原始碼解析,互相交流進步,提升自己的層次,而不是在低層次努力,這才是應對"不按套路出牌"和"深入問下去"的不二法寶.
插播面試題
在dubbo中,什麼時候更新本地的zookeeper資訊快取檔案?訂閱zookeeper資訊的整體過程是怎麼樣的?
前戲鋪墊
用中文來劇透接下來原始碼的一些羞嗒嗒的劇情
只需將這幅圖記在心中,用小學六年苦練的看圖寫作文功力即可概括出面試題答案.
直入主題
這個方法是我們的老朋友了,我們在前面的zookeeper連線和zookeeper建立節點的時候都已經見過(圖中藍色標註的),這次我們還是講一行程式碼(紅色標註的)
這裡就開始發起訂閱請求和訂閱失敗重試,可以對照前期鋪墊中的圖
這裡設定了監聽回撥的地址,即回撥給FailbackRegistry中的notify
從這裡我們可以看到,建立的是持久節點

下面開始對該節點設定監聽(其中涉及一下zkClient的api)
下面要開始更新新的服務資訊,服務啟動和節點更新回撥(前面設定了回撥到這裡)都會呼叫到這裡

那麼下面就要敲黑板劃重點了,由前期鋪墊我們就知道這裡要開始更新本地快取檔案的資訊
這裡採用了執行緒池來更新,dubbo裡面到處都是併發程式設計,所以面試喜歡問多執行緒這個真的不是在裝逼,執行緒的意識還是很重要的,同時如果關注肥朝每週一篇dubbo原始碼解析(真不是套路),面試問到專案哪裡用到了多執行緒例子再也不用擔心了,把dubbo裡面的例子套一下妥妥的.
dubbo在操作檔案的時候還會對檔案進行加鎖,看原始碼要特別留心這些異常資訊,方便出問題時快速定位(其實也是在粗暴式點題怎麼看原始碼)
更新完檔案後,對比新舊的資訊是否有變化,有則重新暴露服務
寫在最後
歡樂的時間總是短暫的,又到了說再見的時間,因為最近都是996,寫到這裡的時候已經是週日的凌晨兩點半.期待下週與你相遇.鑑於本人才疏學淺,不對的地方還望斧正。
原文釋出時間為:2018-10-24
本文作者:肥朝
本文來自雲棲社群合作伙伴“java進階架構師”,瞭解相關資訊可以關注“java進階架構師”。