基於 zookeeper 的同步原理很簡單,主要是依賴 zookeeper 的 watch 機制,soul-web 會監聽配置的節點,soul-admin 在啟動的時候,會將資料全量寫入 zookeeper,後續資料發生變更時,會增量更新 zookeeper 的節點,與此同時,soul-web 會監聽配置資訊的節點,一旦有資訊變更時,會更新本地快取。
soul-admin處開啟zk同步方式
sync:
zookeeper:
url: localhost:2181
sessiontimeout: 5000
connectiontimeout: 2000
閘道器側同樣開啟對zk節點的監聽
soul :
file:
enabled: true
corss:
enabled: true
dubbo :
parameter: multi
sync:
zookeeper:
url: localhost:2181
sessiontimeout: 5000
connectiontimeout: 2000
重新啟動admin 與閘道器服務 看到soul的預設資料已經在zk中了
同樣以變更selector 資料為例 跟蹤具體流程
先看目錄結構 zookeeperdatachangedlistener,zookeeperdatainit這兩個一定是zk資料維護的入口,乙個是初始化資料的,乙個是變更節點資料的 直接在selector處變更資料方法處加上斷點
更新時間進行對應節點的資料寫入
監聽selcetor 節點資料變化
private void watcherselector(final string pluginname));
} subscribechildchanges(configgroupenum.selector, selectorparentpath, childrenlist)
;}
監聽節點資料變化同步記憶體具體處理
private void subscribeselectordatachanges(final string path)
@override
public void handledatadeleted(final string datapath)})
;}
跟蹤了下通過zk同步資料的主要流程
有websocket 的總結經驗整體找對應類方法入口基本比較暢通
對http長輪訓這裡看下順便補充下常輪訓的一些知識盲點
soul閘道器學習資料同步方式http長輪訓
zookeeper websocket 資料同步的機制比較簡單,而 http 同步會相對複雜一些。soul 借鑑了 apollo nacos 的設計思想,取其精華,自己實現了 http 長輪詢資料同步功能。注意 這裡並非傳統的 ajax 長輪詢!http 長輪詢機制如上所示,soul web 閘道器...
Soul閘道器同步資料邏輯初探
按照前面兩個同步資料的分析,可以看到http同步跟其他的同步的載入基本一樣。不同的地方主要是載入資料的操作 載入資料的過程主要是 private void start else executor override suppresswarnings unchecked for datachangedl...
Soul閘道器(九) Nacos同步資料
soul admin的nacos配置類nacosconfiguration初始化bean時通過nacosfactory建立配置服務。nacosdatachangedlistener 會監聽配置的變化,並將變化的配置存入本地記憶體,然後通過 nacos 的配置服務將變化的資料同步到 nacos 中 將...