当前位置:网站首页>【Nacos云原生】阅读源码第一步,本地启动Nacos
【Nacos云原生】阅读源码第一步,本地启动Nacos
2022-06-22 12:34:00 【石臻臻的杂货铺】
前言
在我们去阅读Nacos源码之前,我们得先了解Nacos是干嘛的,以及怎么用,这样有利于我们更容易去理解源码;
查看Nacos的官方文档,我们知道Naocs主要有以下特性:
- 配置中心
- 服务注册与发现
- …
Nacos有给我们提供管理界面,用来方便配置数据;我们先把整个Nacos源码克隆下来,本地启动;熟悉一下如何使用它
启动Nacos项目
1.克隆Nacos源码
git clone https://github.com/alibaba/nacos.git
导入到Idea中
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

3.将项目打包发布
执行打包命令
mvn -Prelease-nacos clean install -U -Dmaven.test.skip=true

打包完毕,执行启动脚本
sh distribution/target/nacos-server-{version}/nacos/bin/startup.sh -m standalone

这里 -m standalone 表示单机模式启动,还有其他可选的参数有:
-f [config/naming]
启动模式 支持只启动某一个模块,config:配置中心; naming:服务注册与发现,不设置时所有模块都会启动-s 后面接服务包名字; 默认值是
nacos-server
就是可以指定启动的Jar包名;
检查启动是否成功

启动成功之后,就可以访问管理后台了
http://localhost:8848/nacos/index.html 登陆账户密码都是: nacos
登陆之后的管理后台
如果刚刚启动的时候加了参数 -f config 那么现在看到的只有配置管理和命名空间两个菜单栏了
使用的详细解释可以参考官方文档 控制台手册
Nacos配置中心数据库表结构说明
tenant_info 租户信息表(命名空间表)
Nacos 基于Namespace 帮助用户逻辑隔离多个命名空间,这可以帮助用户更好的管理测试、预发、生产等多环境服务和配置,让每个环境的同一个配置(如数据库数据源)可以定义不同的值。
这个命名空间的数据就是存在表 tenant_info 中
tenant_info
| 字段 | 备注 |
|---|---|
| id | 主键自增 |
| kp | 定值1 |
| tenant_id | 命名空间id,是一个UUID字符串 |
| tenant_name | 命名空间名字 |
| tenant_desc | 命名空间描述 |
| create_source | 创建人 |
| gmt_create | 创建时间 |
| gmt_modified | 修改时间 |
(kp,tenant_id) 组成唯一约束
config_info 配置信息表
所有配置的数据都存在这个表中;
| 字段 | 描述 |
|---|---|
| id | 自增主键 |
| data_id | 数据ID |
| group_id | 组ID,默认DEFAULT_GROUP |
| content | 配置内容,是一个longtext类型 |
| md5 | content的md5 |
| tenant_id | 租户ID,对应tenant_ino中的tenant_id |
| app_name | 归属App名字 |
| type | json、properties、text、xml等等格式 |
| gmt_create | 创建时间 |
| gmt_modified | 修改时间 |
| c_desc | 描述 |
config_info_beta 灰度配置信息
Nacos中的灰度发布功能,如果点击了灰度发布,并且填写灰度发布的服务器Ip;信息会存储在这里;
| 字段 | 描述 |
|---|---|
| id | 主键自增 |
| data_id | 数据id |
| group_id | 组id |
| app_name | 应用名称 |
| content | 配置内容 |
| beta_ips | 需要灰度发布的机器,如果ip在这里面,则会获取到这里面的配置信息 |
| md5 | content的md5 |
| tenant_id | 租户ID,就是不同的命名空间 |
| gmt_create | 创建时间 |
| gmt_modified | 修改时间 |
(data_id,group_id,tenant_id) 组成唯一约束
config_tags_relation tag关系表
每个配置文件都可以打上tag标签; 这张表记录的是配置文件与tag的绑定关系
| 字段 | 描述 |
|---|---|
| id | 主键。 |
| tag_name | 标签名字 |
| tag_type | 标签类型 |
| data_id | 数据id |
| group_id | 组id |
| tenant_id | 租户ID,就是不同的命名空间 |
| nid | 主键自增长 |
(id,tag_name,tag_type) 组成唯一约束
his_config_info 历史配置表
Nacos会把历史配置都会记录下来,用来方便回滚配置; 默认情况超过30天的记录会被删除;
| 字段 | 描述 |
|---|---|
| id | id |
| nid | 主键,自增 |
| data_id | 数据id |
| group_id | 组id |
| app_name | 应用名称 |
| content | 配置内容 |
| md5 | content的md5 |
| tenant_id | 租户ID,就是不同的命名空间 |
| gmt_create | 创建时间 |
| gmt_modified | 修改时间 |
| op_type | I、U、D 操作类型,增改删 |
如何本地调试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 &

重新启动
先把项目停止sh distribution/target/nacos-server-{version}/nacos/bin/shutdown.sh
然后重新启动sh distribution/target/nacos-server-1.1.3/nacos/bin/startup.sh -m standalone
启动成功,检查调试端口是否打开
已经有一个6666的端口在LISTEN中了;
配置调试
在Idea中新建一个remote启动;

启动调试
启动调试; 打一个断点,然后管理后端操作一下;看下效果
调试成功
项目启动了,也调试成功了; 那么我们就可以方便的开始阅读源码了!
边栏推荐
猜你喜欢

Rce & Code Execution Vulnerability

leetcode 834. 树中距离之和

SSM based library management system, high-quality graduation thesis example (can be used directly), project import video, attached source code and database script, Thesis Writing Tutorial

leetcode LCP 10. 二叉树任务调度

leetcode 834. Sum of distances in the tree

Set up your own website (5)

redis修改密码,及启动、查看等操作

Application of motion capture system in positioning and mapping of mobile robot in underground tunnel

leetcode-区间dp

leetcode 11. 盛最多水的容器
随机推荐
448. Find All Numbers Disappeared in an Array
leetcode 85. 最大矩形
leetcode-并查集
AcWing第52场周赛
46. Permutations
leetcode 1130. 叶值的最小代价生成树
Detailed installation tutorial of MySQL 8.0.29 under windows to solve the problem that vcruntime140 cannot be found_ 1.dll、plugin caching_ sha2_ password could not be loaded
Stored procedures in MySQL
Acwing week 54
剑指 Offer II 114. 外星文字典
769. Max Chunks To Make Sorted
Maui uses Masa blazor component library
RCE&代码执行漏洞
260. Single Number III
文件下载漏洞&文件读取漏洞&文件删除漏洞
241. Different Ways to Add Parentheses
Termux set up the computer to connect to the mobile phone. (knock the command quickly), mobile phone termux port 8022
leetcode 834. 树中距离之和
leetcode每日一题202110
leetcode-子序列/子串問題