Soul 原始碼閱讀11 Zookeeper同步資料

2021-10-17 12:44:51 字數 2139 閱讀 3853

基於 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外掛程式 總結 上篇已介紹...