在前面的幾篇文章中已經介紹了http、zk、websocket這幾種同步資料的方式,也對其中的原始碼做了些分析。那麼本篇文章將開始nacos資料同步的解析了。
還是和前面一樣要從配置檔案開始,還是soul-admin、soul-bootstrap這兩個工程的配置檔案。
soul-admin.yml:
soul:
database:
dialect: mysql
init_script:
"meta-inf/schema.sql"
init_enable: true
sync:
nacos:
url: localhost:
8848
namespace:
1c10d748-af86-
43b9-
8265
-75f487d20c6c
acm:
enabled: false
endpoint: acm.aliyun.com
namespace:
accesskey:
secretkey:
soul-bootstrap.yml:
soul:
file:
enabled: true
corss:
enabled: true
dubbo :
parameter: multi
sync:
nacos:
url: localhost:
8848
namespace:
1c10d748-af86-
43b9-
8265
-75f487d20c6c
acm:
enabled: false
endpoint: acm.aliyun.com
namespace:
accesskey:
secretkey:
然後就是需要在soul-bootstrap工程的pom檔案中加上關於nacos的依賴,如下:
<
!--soul data sync start use nacos-->
org.dromara<
/groupid>
soul-spring-boot-starter-sync-
data
-nacos<
/artifactid>
$<
/version>
<
/dependency>
前面都說了資料同步介面,這裡依舊略過,我們只看關於nancos資料同步的實現,**如下:
public
class
nacossyncdataservice
extends
nacoscachehandler
implements
autocloseable
, syncdataservice
public
void
start()
@override
public
void
close()
);listeners.
clear()
;}}
上面的**中,可以看到nacossyncdataservice類繼承了nacoscachehandler這個類,當然也實現了autocloseable, syncdataservice。
然後就是乙個構造器,構造器引數傳入的是configservice、metadatasubscribers、authdatasubscribers;在建構函式中同時呼叫了start函式,在這個函式裡涉及到了外掛程式資料、選擇器資料、規則資料、元資料資料、authmap。
watcherdata:
在start方法中都呼叫了watcherdata函式,那就來看看這個函式的具體實現,如下:
protected
void
watcherdata
(final string dataid,
final onchange oc)
@override
public executor getexecutor()
};// 根據dataid從nacos拿到資料,然後將拿到的資料傳給updatepluginmap方法呼叫
oc.change
(getconfigandsignlistener
(dataid, listener));
listeners.
computeifabsent
(dataid, key -
>
newarraylist
<
>()
).add(listener)
;}
updatepluginmap:protected
void
updatepluginmap
(final string configinfo)))
;}catch
(jsonparseexception e)
}
updateselectormap:protected
void
updateselectormap
(final string configinfo)))
;}catch
(jsonparseexception e)
}
updaterulemap:protected
void
updaterulemap
(final string configinfo)))
;}catch
(jsonparseexception e)
}
updatemetadatamap:protected
void
updatemetadatamap
(final string configinfo)))
;}catch
(jsonparseexception e)
}
updateauthmap:protected
void
updateauthmap
(final string configinfo)))
;}catch
(jsonparseexception e)
}
本篇文章簡單的介紹了soul-bootstrap啟動時所作的資料更新,從工程的配置檔案、nacos的實現、以及資料監聽和處理這幾個部分進行的簡單分析。 soul閘道器資料同步方式之zookeeper
基於 zookeeper 的同步原理很簡單,主要是依賴 zookeeper 的 watch 機制,soul web 會監聽配置的節點,soul admin 在啟動的時候,會將資料全量寫入 zookeeper,後續資料發生變更時,會增量更新 zookeeper 的節點,與此同時,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 中 將...