目標(biāo)
-
Nacos簡單介紹
- Nacos 關(guān)鍵特性
- Nacos 服務(wù)搭建啟動(dòng)
-
soul-admin nacos配置啟動(dòng)
- 添加Soul-Nacos依賴
- 修改yml配置文件
- 啟動(dòng)admin會(huì)看到Nacos網(wǎng)頁上有四個(gè)數(shù)據(jù)
- 介紹Nacos在Admin啟動(dòng)流程
- DataSyncConfiguration初始化NacosBean
admin數(shù)據(jù)發(fā)生變動(dòng)發(fā)布流程
總結(jié)
Nacos簡單介紹
上圖從特性、架構(gòu)、業(yè)務(wù)、生態(tài)、優(yōu)勢、戰(zhàn)略等六個(gè)方面介紹了Nacos的核心功能
- Nacos(Dynamic Naming and Configuration Service):從全稱我們看得出來他是動(dòng)態(tài)命令和配置服務(wù),是Spring Cloud Alibaba的一個(gè)組件。
- Nacos數(shù)據(jù)模型Key由三元組唯一確定,Namespace默認(rèn)是空串,公共命名空間(public),分組默認(rèn)是DEFAUTL_GROUP
- Nacos致力于幫助我們發(fā)現(xiàn)、配置和管理微服務(wù)。Nacos提供了一組簡單易用的特性集,幫助我們快速實(shí)現(xiàn)動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置、服務(wù)元數(shù)據(jù)及流量管理。
Nacos關(guān)鍵特性
- 服務(wù)發(fā)現(xiàn)和服務(wù)健康監(jiān)測
- 動(dòng)態(tài)配置服務(wù)
- 動(dòng)態(tài)DNS服務(wù)
- 服務(wù)及其元數(shù)據(jù)管理
Nacos服務(wù)搭建啟動(dòng)
- Nacos server 下載二進(jìn)制文件
- 解壓執(zhí)行

- 啟動(dòng)成功
Nacos 服務(wù)默認(rèn)端口是8848,我們登陸localhost:8848/nacos 即可訪問官方后臺(tái)管理
- 登陸后臺(tái)查看
后面我們啟動(dòng)admin/bootstrap 就可以看到有數(shù)據(jù)注冊(cè)上來
Soul-Admin的Nacos配置啟動(dòng)
添加Soul-Nacos依賴
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos-client.version}</version>
</dependency>
修改yml配置文件

此處Soul默認(rèn)只使用一種數(shù)據(jù)同步方式,所以將其他三種同步方式注釋掉。只打開Nacos配置
啟動(dòng)admin會(huì)看到Nacos網(wǎng)頁上有四個(gè)數(shù)據(jù)
注意點(diǎn): 默認(rèn)Nacos 是不會(huì)自動(dòng)創(chuàng)建命名空間的,有些同學(xué)以為網(wǎng)頁上看不到數(shù)據(jù),就以為數(shù)據(jù)同步不起作用。經(jīng)過測試這其實(shí)是Nacos展示這塊沒有根據(jù)發(fā)布數(shù)據(jù)來自動(dòng)顯示。如何做才能看到上圖樣子呢。
只需要點(diǎn)擊命名空間,創(chuàng)建你配置文件配置的namespace的名稱即可,本文namespace是1c10d748-af86-43b9-8265-75f487d20c6c。所以本文建立的命令為

介紹Nacos 在Admin啟動(dòng)流程
DataSyncConfiguration 初始化NacosBean
- 初始化DataChangedListener 數(shù)據(jù)監(jiān)聽器
這里只是初始化Nacos客戶端和監(jiān)聽數(shù)據(jù)監(jiān)聽器
- 檢查是否對(duì)Nacos數(shù)據(jù)進(jìn)行上報(bào)
這里之前未做檢查,其實(shí)我覺得沒必要做檢查,畢竟Nacos是全量更新,就算一開始拿不到數(shù)據(jù),在后期數(shù)據(jù)變更時(shí)候,可以做一次全量更新。
admin 數(shù)據(jù)發(fā)生變動(dòng)發(fā)布流程
@Override
public void onPluginChanged(final List<PluginData> changed, final DataEventTypeEnum eventType) {
// 這里進(jìn)來先獲取Nacos對(duì)應(yīng)的數(shù)據(jù),是考慮到多個(gè)admin,adminA 改了 adminB如何取到A改的值,這里就在adminB未重啟的情況下,只要發(fā)生變化,就會(huì)重新拉取Nacos 的數(shù)據(jù),來保證admin之間的數(shù)據(jù)同步
updatePluginMap(getConfig(NacosPathConstants.PLUGIN_DATA_ID));
switch (eventType) {
case DELETE:
changed.forEach(plugin -> PLUGIN_MAP.remove(plugin.getName()));
break;
case REFRESH:
case MYSELF:
Set<String> set = new HashSet<>(PLUGIN_MAP.keySet());
changed.forEach(plugin -> {
set.remove(plugin.getName());
PLUGIN_MAP.put(plugin.getName(), plugin);
});
PLUGIN_MAP.keySet().removeAll(set);
break;
default:
changed.forEach(plugin -> PLUGIN_MAP.put(plugin.getName(), plugin));
break;
}
publishConfig(NacosPathConstants.PLUGIN_DATA_ID, PLUGIN_MAP);
}
總結(jié)
今天收獲很大,由原來的的單機(jī)編程想法往集群方向的開發(fā)突破,Nacos 在集群環(huán)境下,admin端是如何知道A改了數(shù)據(jù)B端如何知道。使用Nacos 作為中間媒介,并且對(duì)應(yīng)端數(shù)據(jù)發(fā)生變化先獲取媒介上當(dāng)前最新數(shù)據(jù),然后在獲取自己關(guān)心的數(shù)據(jù),進(jìn)行發(fā)布更新。