简介
本篇文章来探索下Soul网关的Nacos数据同步的示例运行,由于目前感觉这个nacos对新手不是太友好,而且感觉可能是有bug,所以单独写一篇详解如何配置,为下一步进行源码解析,排查其中的问题打下基础
示例运行
本篇文章问题基于2021.1.23日的soul最新代码版本
nacos、mysql docker 启动
我们使用docker启动一个nacos 和 mysql
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
# 管理界面用户名和密码:nacos nacos
git clone https://github.com/nacos-group/nacos-docker.git
cd .\nacos-docker\
docker-compose -f example/standalone-derby.yaml up
访问nacos界面:127.0.0.1:8848 ,如果是正常的,就能看到下面五个数据配置,那恭喜你,你的是正常运行的。如果是空的,那说明你和我遇到了一样的问题:
问题场景描述
我们把admin、example-HTTP、Bootstrap启动起来,可能会遇到下面的问题之一:
- 1.都能正常启动,但nacos界面是空的,Bootstrap访问失败,没找到相应的数据
- 2.bootstrap启动失败,说读取数据为空
正确配置Nacos
Bootstrap配置
首先确保你的maven依赖开启了nacos-starter,如下,如果没有的请添加进去
<!-- 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,并且修改Nacos同步配置,去掉acm相关的东西,都给注释掉!我们使用新的命名空间soul,方便查看数据
soul:
file:
enabled: true
corss:
enabled: true
dubbo :
parameter: multi
sync:
# websocket :
# urls: ws://localhost:9095/websocket
# zookeeper:
# url: localhost:2181
# sessionTimeout: 5000
# connectionTimeout: 2000
# http:
# url : http://localhost:9095
nacos:
url: localhost:8848
namespace: soul
# acm:
# enabled: false
# endpoint: acm.aliyun.com
# namespace:
# accessKey:
# secretKey:
如果运行起来,报错是读取数据是Null,那说明配置成功,下面接着配置其他的
Admin配置
首先确保引入了Nacos-client依赖,如果没有,请进行添加:
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos-client.version}</version>
</dependency>
配置文件也是,其他的同步方式都关闭,只留下Nacos,并修改命名空间为soul,注释掉acm相关(PS:进行debug的时候发现websocket好像也是开启的,感觉有点奇怪,但没有细看)
soul:
database:
dialect: mysql
init_script: "META-INF/schema.sql"
init_enable: true
sync:
# websocket:
# enabled: false
# zookeeper:
# url: localhost:2181
# sessionTimeout: 5000
# connectionTimeout: 2000
# http:
# enabled: true
nacos:
url: localhost:8848
namespace: soul
# acm:
# enabled: false
# endpoint: acm.aliyun.com
# namespace:
# accessKey:
# secretKey:
可以试着启动下Admin和example-HTTP,看看有没有错,没有的话,继续下面的
Nacos配置
进入Nacos管理界面,用户名和密码:nacos nacos
在左边菜单栏中进行命名空间,选择新建命名空间,全部填写soul,建立soul的命名空间
这个时候再重启Admin和HTTP示例,在配置管理--配置列表中,在上方有一个命名空间的名称,public和soul。点击切换到soul,不出意外的话,也是啥也没有
手动同步数据
经过前面文章,我们知道有五种数据:插件数据、选择器数据、规则数据、元数据、认证管理数据
下面我们进入Admin后台管理界面,分别进入元数据、认证管理界面、插件管理,点击同步数据,然后点击nacos配置列表页面的查询,发现出现了auth、meta、plugin相关的数据
这个时候如果重启了HTTP示例,可能也会出现selector和rule的数据(如果没有,接着下面的手动同步这些数据),但我们尝试访问接口:http://127.0.0.1:9195/http/order/findById?id=1111 ,会发现找不到rule
这个时候,我们需要点击相应的rule,进行修改(改改状态,日志是否打印之类的小改动即可),那它就会同步到nacos里面去,再次访问接口就能正常返回了
这样,基本能跑一下,但问题还是很大,最大的问题是没有自动同步全量数据,需要手工同步
总结
本篇文章,记录了一次Nacos运行不成功的不完美的解决方法,后面需要进一步的进行源码探究,看看问题