soul网关源码学习09-Nacos数据同步
目标:
- 梳理Nacos同步数据的流程
一、数据流向分析
- 启动
admin,全量更新一次数据到Nacos,监听admin的CURD操作。 - 启动
bootstrap,从Nacos拉取一次全量数据更新到本地缓存并启动监听。 admin做CURD操作,触发监听,推送全量数据到Nacos。bootstrap触发监听,从Nacos拉取全量数据更新到本地缓存。

二、数据同步流程
- 启动
admin,加载事件分发器DataChangedEventDispatcher。 - 实例化
DataChangedListener的实现类NacosDataChangedListener,开始监听admin数据的变化。 - 根据配置加载
NacosDataInit,初始化数据到Nacos。 - 启动
bootstrap,加载Nacos数据同步类NacosSyncDataService。 Nacos客户端会全量从Nacos拉取一次数据更新到缓存中。Nacos客户端开始监听Nacos,若有变化,则拉取全量的数据更新到缓存中。admin和bootstrap都启动之后,修改admin的数据,会触发事件监听,admin会把数据推送到Nacos,客户端监听到数据变化,拉取全量的数据更新到缓存中。

三、运行项目
修改配置
soul-bootstrap的application.yml修改数据同步方式为Nacos,url是Nacos服务地址,namespace是命名空间,用于隔离不同的环境。
nacos:
url: localhost:8848
namespace: 1c10d748-af86-43b9-8265-75f487d20c6c
acm:
enabled: false
endpoint: acm.aliyun.com
namespace:
accessKey:
secretKey:
soul-bootstrap的pom.xml增加Nacos同步数据依赖。
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-sync-data-nacos</artifactId>
<version>${project.version}</version>
</dependency>
soul-admin的application.yml修改数据同步方式为Nacos。
nacos:
url: localhost:8848
namespace: 1c10d748-af86-43b9-8265-75f487d20c6c
acm:
enabled: false
endpoint: acm.aliyun.com
namespace:
accessKey:
secretKey:
启动项目
修改完配置,本地先启动Nacos,运行命令:startup.cmd -m standalone

打开Nacos管理界面:http://localhost:8848/nacos,账号密码:nacos/nacos,根据上面配置的namespace创建一个命名空间。

启动soul-admin

启动soul-bootstrap

查看Nacos配置,可以看到admin已经把配置都推送到Nacos了。

四、源码分析
soul-admin
还是从soul-admin的配置类DataSyncConfiguration入手,找到Nacos的内部类NacosListener,注意这个ConfigService,是整个配置中心的核心,执行获取数据、监听等操作。

最低0.47元/天 解锁文章
1500





