Soul API閘道器資料同步之Nacos資料同步

2021-10-17 15:14:28 字數 3439 閱讀 8070

在前面的幾篇文章中已經介紹了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 中 將...