当前位置:网站首页>【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 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启动;

启动调试
启动调试; 打一个断点,然后管理后端操作一下;看下效果
调试成功
项目启动了,也调试成功了; 那么我们就可以方便的开始阅读源码了!
边栏推荐
- 10 minute fitness method reading notes (2/5)
- SAP 自开发记录用户登录日志等信息
- Flume common commands and basic operations
- 前几年外包干了四年,秋招感觉人生就这样了..
- Knowledge representation (KR)
- Solution to order timeout unpaid
- JDBC -- use JDBC connection to operate MySQL database
- A few years ago, I outsourced for four years. Qiu Zhao felt that life was like this
- JDBC exercise - query data encapsulated into object return & simple login demo
- Redis highly available sentinel mechanism
猜你喜欢

10 minute fitness method reading notes (3/5)

Knowledge representation (KR)

Third party payment interface design

Migrate data from Mysql to neo4j database

Transactions from January 14 to 19, 2022

Compilation principle reading notes (1/12)

Oppo Xiaobu launched Obert, a large pre training model, and promoted to the top of kgclue

UNIX socket advanced learning diary - advanced i/o functions

Taobao order interface | order flag remarks, may be the most stable and easy-to-use interface

JSON parsing error special character processing (really speechless... Troubleshooting for a long time)
随机推荐
《信息系统项目管理师》备考笔记---信息化知识
Taobao order amount check error, avoid capital loss API
Sqoop import and export operation
What if wechat is mistakenly sealed? Explain the underlying logic of wechat seal in detail
Transactions from January 6 to October 2022
GPON other manufacturers' configuration process analysis
Simply take stock reading notes (2/8)
C language structure is initialized as a function parameter
非技术部门,如何参与 DevOps?
[superhard core] is the core technology of redis
Transactions on December 23, 2021
Language model
以VMware创新之道,重塑多云产品力
Introduction to GNN
Transactions from January 14 to 19, 2022
Anaconda creates a virtual environment and installs pytorch
前几年外包干了四年,秋招感觉人生就这样了..
GNN(pytorch-geometric)
Resnet18 actual battle Baoke dream spirit
实战模拟│JWT 登录认证