前言
在我们去阅读Nacos源码之前,我们得先了解Nacos是干嘛的,以及怎么用,这样有利于我们更容易去理解源码;
查看Nacos的官方文档,我们知道Naocs主要有以下特性:
- 配置中心
- 服务注册与发现
- ...
Nacos有给我们提供管理界面,用来方便配置数据;我们先把整个Nacos源码克隆下来,本地启动;熟悉一下如何使用它
启动Nacos项目
1.克隆Nacos源码
git clone https://github.com/alibaba/nacos.git
导入到Idea中
![05273aa20711b3629798ab4dd2a59781.png](https://i-blog.csdnimg.cn/blog_migrate/13d312acfadbbd508ad4d45306d9afe5.jpeg)
2.配置Mysql数据源
Nacos内置嵌入式derby数据库,但是它只适合开发测试中使用,也不利于我们观察数据;所以我们更改一下数据库为Mysql
在使用Mysql之前,需要先建立nacos_config的数据库sql文件在模块 distribution
中的conf/nacos-mysql.sql
; 执行一下这个文件;
在模块 nacos/distribution
中添加Mysql的配置文件
## 数据库为mysql
spring.datasource.platform=mysql
## 数据库编号 因为可能配置有多数据源 主从
db.num=1
db.url.0=jdbc:mysql://XX.XX.XXX.XX:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user.0=name
db.password.0=password
![df25f718deb6bbd25d868e86db4ec261.png](https://i-blog.csdnimg.cn/blog_migrate/822513c73f2cdfd1be9e4e9479d3bcb8.jpeg)
3.将项目打包发布
执行打包命令
mvn -Prelease-nacos clean install -U -Dmaven.test.skip=true
![56c28f50ce728e94cefee93dbaf64027.png](https://i-blog.csdnimg.cn/blog_migrate/e09dee75acd2559f0f597a6eb06a49f5.jpeg)
打包完毕,执行启动脚本
sh distribution/target/nacos-server-{version}/nacos/bin/startup.sh -m standalone
![e6bdf070a222a8d4720ef19cd40ac222.png](https://i-blog.csdnimg.cn/blog_migrate/69f1cc7514ef37e13ce4a95e6b3da8d6.jpeg)
这里 -m standalon
e 表示单机模式启动,还有其他可选的参数有: - -f [config/naming]启动模式 支持只启动某一个模块,config:配置中心; naming:服务注册与发现,不设置时所有模块都会启动
- -s 后面接服务包名字; 默认值是
nacos-server
就是可以指定启动的Jar包名;
![09ede7805c95af0bf242726a419164a7.png](https://i-blog.csdnimg.cn/blog_migrate/35b3ec4f9449f91beca95631188454e2.jpeg)
检查启动是否成功
![2f21890322ae957e5223c51b41dbd9dc.png](https://i-blog.csdnimg.cn/blog_migrate/59cfa51718afb31791227fc24d5a249e.jpeg)
启动成功之后,就可以访问管理后台了 http://localhost:8848/nacos/index.html 登陆账户密码都是: nacos 登陆之后的管理后台
![dcaee3b15fa8b91b3a2fd567c0595071.png](https://i-blog.csdnimg.cn/blog_migrate/3f5b80d27c346160067187da06ada333.jpeg)
如果刚刚启动的时候加了参数 -f config
那么现在看到的只有配置管理和命名空间两个菜单栏了 使用的详细解释可以参考官方文档 控制台手册
Nacos配置中心数据库表结构说明
tenant_info 租户信息表(命名空间表)
Nacos 基于Namespace 帮助用户逻辑隔离多个命名空间,这可以帮助用户更好的管理测试、预发、生产等多环境服务和配置,让每个环境的同一个配置(如数据库数据源)可以定义不同的值。
![1c24ae886cc723363e8290f1adf6bdd8.png](https://i-blog.csdnimg.cn/blog_migrate/e033d36e3f1a1b7ca2d1093939398887.jpeg)
这个命名空间的数据就是存在表 tenant_info
中 tenant_info
![7a81cc5c162c88946052d3469d5fafb7.png](https://i-blog.csdnimg.cn/blog_migrate/40ac6730b9132fe2f5e25390012f8caa.jpeg)
config_info 配置信息表
![a393755a80fb9db0c6fdd7ebc6a2f0c7.png](https://i-blog.csdnimg.cn/blog_migrate/03033d02b2bb9a0580bb47f390775ca6.jpeg)
config_info_beta 灰度配置信息
![1e923291c4b3f0cd7eb773c52091650d.png](https://i-blog.csdnimg.cn/blog_migrate/6cecb3d7d2800450fb41b20be0f92af6.jpeg)
config_tags_relation tag关系表
![c2839cdaa413b29ac6e2b34f6ac25839.png](https://i-blog.csdnimg.cn/blog_migrate/be3f16400cb6880f8a042edf91a1f041.jpeg)
his_config_info 历史配置表
![06279781fb3fb83a3d76f5e8677e7057.png](https://i-blog.csdnimg.cn/blog_migrate/4f43f9789aa682d100c1efddcee501da.jpeg)
如何本地调试Jar包方式启动的源码
由于上面的启动方式,我们可能不能进行本地Debug;但是我们可以在启动的时候开启Debug端口,通过远程监听Debug端口来进行Debug;
那么我们先修改一下启动脚本,打开调试端口修改 文件 distribution/target/nacos-server-{version}/nacos/bin/startup.sh
# 加入调试端口 6666调试端口随意设置
JAVA_DEBUG_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=6666,server=y,suspend=n"
echo "$JAVA ${JAVA_DEBUG_OPTS} ${JAVA_OPT} " > ${BASE_DIR}/logs/start.out 2>&1 &
nohup $JAVA ${JAVA_DEBUG_OPTS} ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &
![ae97584dfe93d744cdba953196b76f81.png](https://i-blog.csdnimg.cn/blog_migrate/05bb6961efdeaa2d0f64cb7cf159ef6a.jpeg)
重新启动
先把项目停止 sh distribution/target/nacos-server-{version}/nacos/bin/shutdown.sh
然后重新启动 sh distribution/target/nacos-server-1.1.3/nacos/bin/startup.sh -m standalone
启动成功,检查调试端口是否打开
![ac5d995b94ae279c1d3c61dfa2b2622e.png](https://i-blog.csdnimg.cn/blog_migrate/304edfb222a694a565ea64359ee97f08.png)
已经有一个6666的端口在LISTEN中了;
配置调试 在Idea中新建一个remote启动;
![f5a9793a792b269065cc8bea52cb3384.png](https://i-blog.csdnimg.cn/blog_migrate/ab105f83b155d3b4cee537743aa5bb41.jpeg)
![e1194dd524386c4cbaa4e1927cff2fd4.png](https://i-blog.csdnimg.cn/blog_migrate/d37cae5ffde970b53f487eea537b51b1.jpeg)
启动调试 启动调试; 打一个断点,然后管理后端操作一下;看下效果
![23f330af6c9bb0f131a58cf8e564be53.png](https://i-blog.csdnimg.cn/blog_migrate/d2968e4bcf1d339c903b68a73009fd00.jpeg)
调试成功
项目启动了,也调试成功了; 那么我们就可以方便的开始阅读源码了!