当前位置:网站首页>【Nacos云原生】阅读源码第一步,本地启动Nacos
【Nacos云原生】阅读源码第一步,本地启动Nacos
2022-07-05 12:38: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 standalon
e 表示单机模式启动,还有其他可选的参数有:
-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启动;
启动调试
启动调试; 打一个断点,然后管理后端操作一下;看下效果
调试成功
项目启动了,也调试成功了; 那么我们就可以方便的开始阅读源码了!
边栏推荐
- Summary of C language learning problems (VS)
- Transactions from January 6 to October 2022
- How can labels/legends be added for all chart types in chart. js (chartjs.org)?
- Redis's memory elimination mechanism, read this article is enough.
- UNIX socket advanced learning diary -ipv4-ipv6 interoperability
- Ecplise development environment configuration and simple web project construction
- End to end neural network
- 2021-12-22 transaction record
- Resnet+attention project complete code learning
- ZABBIX monitors mongodb (template and deployment operations)
猜你喜欢
Database connection pool & jdbctemplate
Understand redis persistence mechanism in one article
Taobao short videos are automatically released in batches without manual RPA open source
Pinduoduo flag insertion remarks API
Interviewer: is acid fully guaranteed for redis transactions?
实战模拟│JWT 登录认证
NPM install reports an error
Resnet18 actual battle Baoke dream spirit
Kotlin变量
Oppo Xiaobu launched Obert, a large pre training model, and promoted to the top of kgclue
随机推荐
Laravel文档阅读笔记-mews/captcha的使用(验证码功能)
NFT: how to make money with unique assets?
由扫地增而引起的小叙
ZABBIX monitors mongodb (template and deployment operations)
Iterator details in list... Interview pits
Migrate data from Mysql to neo4j database
Introduction to relational model theory
JSON parsing error special character processing (really speechless... Troubleshooting for a long time)
How does MySQL execute an SQL statement?
JDBC exercise - query data encapsulated into object return & simple login demo
Hexadecimal conversion summary
2021.12.16-2021.12.20 empty four hand transaction records
Taobao, pinduoduo, jd.com, Doudian order & Flag insertion remarks API solution
Clear neo4j database data
A possible investment strategy and a possible fuzzy fast stock valuation method
Database connection pool & jdbctemplate
Learn garbage collection 01 of JVM -- garbage collection for the first time and life and death judgment
Sqoop import and export operation
Transactions from December 27 to 28, 2021
非技术部门,如何参与 DevOps?