1月23日作业
- 启动admin,与网关。 admin操作,使用nacos同步数据到网关
- 记录心得并总结
Soul admin与Soul网关的nacos同步
在soul-admin
项目application.yml
文件中引入nacos相关的dataSync
策略:
soul:
nacos:
url: localhost:8848
namespace: 1c10d748-af86-43b9-8265-75f487d20c6c
acm:
enabled: false
endpoint: acm.aliyun.com
namespace:
accessKey:
secretKey:
在soul-bootstrap
项目application.yml
文件中引入
soul:
nacos:
url: localhost:8848
namespace: 1c10d748-af86-43b9-8265-75f487d20c6c
acm:
enabled: false
endpoint: acm.aliyun.com
namespace:
accessKey:
secretKey:
同时在pom.xml
文件中引入相关依赖
<!--soul data sync start use nacos-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-sync-data-nacos</artifactId>
<version>${project.version}</version>
</dependency>
在本地启动一个nacos
服务以后,再启动soul-admin和soul-bootstrap。但是发现soul-bootstrap控制台抛出NullPointerException
异常。
打断点进行追踪,发现configInfo
为null
, 找到空指针异常原因。
此时进行继续追踪,发现
可以进行合理猜想,configInfo
为null的相关原因可能是因为nacos
配置中心的相关配置为null,需要自己手动输入一些config信息进行验证。
此时注意到在NacosCacheHandler
中相关参数信息
此时手动在nacos控制台手动输入相关配置信息
然后重新启动soul网关,则可以顺利运行。
在soul网关启动过程中,将NacosSyncDataService
的bean注入到ioc容器中。NacosSycnDataService
继承了NacosCacheHandler
并且实现了SyncDataService
. 只得注意的是start()
方法,开启监听nacos
配置数据变化。
watchData
方法里提供了一个nacos
listener作为nacos的client,用来监听configInfo
是否变化
总结
nacos作为soul-admin和soul网关之间的同步方式,与websocket和zk不同。第一次初始化时由于没有数据会导致NTE异常导致项目不能启动,然后nacos每次都是变动都要更新全量数据。