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的内部