基於 zookeeper 的同步原理很簡單,主要是依賴zookeeper
的 watch 機制,soul-web
會監聽配置的節點,soul-admin
在啟動的時候,會將資料全量寫入zookeeper
,後續資料發生變更時,會增量更新zookeeper
的節點,與此同時,soul-web
會監聽配置資訊的節點,一旦有資訊變更時,會更新本地快取。
soul:
database:
dialect: mysql
init_script: "meta-inf/schema.sql"
init_enable: true
sync:
# websocket:
# enabled: true
zookeeper:
url: localhost:2181
sessiontimeout: 5000
connectiontimeout: 2000
soul :
file:
enabled: true
corss:
enabled: true
dubbo :
parameter: multi
sync:
# websocket :
# urls: ws://localhost:9095/websocket
zookeeper:
url: localhost:2181
sessiontimeout: 5000
connectiontimeout: 2000
org.dromara
soul-spring-boot-starter-sync-data-zookeeper
$
zk***接收到資料發生變化,就判斷事件型別 ,如果是delete,還要刪除對應的selector,rule資料,
否則建立或更新節點。
public zookeeperdatachangedlistener(final zkclient zkclient)
public void onpluginchanged(final listchanged, final dataeventtypeenum eventtype)
//create or update
upsertzknode(pluginpath, data);}}
zkclient
客戶端判斷節點是否存在,不存在建立節點再寫資料。
private void upsertzknode(final string path, final object data)
zkclient.writedata(path, data);
}
soul-bootstrap 引入soul-spring-boot-starter-sync-data-zookeeper
,裡面的自動配置類zookeepersyncdataconfiguration
,建立了同步資料的syncdataservice
類,往spring容器註冊了zkclient
。
Soul原始碼閱讀 1 初識 Soul
無論我們學習什麼東西之前,都要先搞清楚我們要學習的是什麼,就像一些哲學思考先要給出清晰的定義,否則後面的一切都無從談起。從今天開始,我來和大家一起,學習一款非常優秀的開源閘道器專案 soul。soul 是什麼呢?先來看下官網作者的定義 這是乙個非同步的,高效能的,跨語言的,響應式的api閘道器。我希...
Soul原始碼閱讀 2 單機部署 Soul
在學習一項新技術時,我們先按照官網上的 demo 把環境搭建起來。今天先搭建乙個單機版測試環境。這裡有2個選擇 如果學習原始碼後,希望參與到 soul 開源專案中,fork 到自己賬號下,再 clone 自己賬號下的 soul 專案。這裡,我建議大家採用第2種方式,也以第2種方式演示。git clo...
soul原始碼閱讀(十)soul所有外掛程式介紹續
目錄 hystrix外掛程式 sentinel外掛程式 resilience4j外掛程式 monitor外掛程式 waf外掛程式 sign外掛程式 rewrite外掛程式 global外掛程式 webclient外掛程式 webclientresponse外掛程式 tars外掛程式 總結 上篇已介紹...