开发者社区> 石臻臻的杂货铺> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

【Nacos源码之配置管理 一】阅读源码第一步,本地启动Nacos

简介: 在我们去阅读Nacos源码之前,我们得先了解Nacos是干嘛的,以及怎么用,这样有利于我们更容易去理解源码; 查看Nacos的官方文档,我们知道Naocs主要有以下特性: • 配置中心 • 服务注册与发现 • ... Nacos有给我们提供管理界面,用来方便配置数据;我们先把整个Nacos源码克隆下来,本地启动;熟悉一下如何使用它
+关注继续查看

1前言

在我们去阅读Nacos源码之前,我们得先了解Nacos是干嘛的,以及怎么用,这样有利于我们更容易去理解源码;

查看Nacos的官方文档,我们知道Naocs主要有以下特性:

  • 配置中心
  • 服务注册与发现
  • ...

Nacos有给我们提供管理界面,用来方便配置数据;我们先把整个Nacos源码克隆下来,本地启动;熟悉一下如何使用它

2启动Nacos项目

1.克隆Nacos源码

git clone https://github.com/alibaba/nacos.git

导入到Idea中image

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

image在这里插入图片描述

3.将项目打包发布

执行打包命令

mvn -Prelease-nacos clean install -U  -Dmaven.test.skip=true

image在这里插入图片描述

打包完毕,执行启动脚本

sh distribution/target/nacos-server-{version}/nacos/bin/startup.sh -m standalone

imageimage.png

这里 -m standalone 表示单机模式启动,还有其他可选的参数有:

  • -f [config/naming]
    启动模式 支持只启动某一个模块,config:配置中心; naming:服务注册与发现,不设置时所有模块都会启动
  • -s 后面接服务包名字; 默认值是 nacos-server就是可以指定启动的Jar包名;image

检查启动是否成功

image启动成功之后,就可以访问管理后台了http://localhost:8848/nacos/index.html 登陆账户密码都是: nacos登陆之后的管理后台image如果刚刚启动的时候加了参数 -f config 那么现在看到的只有配置管理命名空间两个菜单栏了 使用的详细解释可以参考官方文档 控制台手册

3Nacos配置中心数据库表结构说明

tenant_info 租户信息表(命名空间表)

Nacos 基于Namespace 帮助用户逻辑隔离多个命名空间,这可以帮助用户更好的管理测试、预发、生产等多环境服务和配置,让每个环境的同一个配置(如数据库数据源)可以定义不同的值。image这个命名空间的数据就是存在表 tenant_infotenant_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类型
md5content的md5
tenant_id租户ID,对应tenant_ino中的tenant_id
app_name归属App名字
typejson、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在这里面,则会获取到这里面的配置信息
md5content的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天的记录会被删除;

字段描述
idid
nid主键,自增
data_id数据id
group_id组id
app_name应用名称
content配置内容
md5content的md5
tenant_id租户ID,就是不同的命名空间
gmt_create创建时间
gmt_modified修改时间
op_typeI、U、D 操作类型,增改删

4如何本地调试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 &

image重新启动

先把项目停止sh distribution/target/nacos-server-{version}/nacos/bin/shutdown.sh然后重新启动sh distribution/target/nacos-server-1.1.3/nacos/bin/startup.sh -m standalone

启动成功,检查调试端口是否打开image已经有一个6666的端口在LISTEN中了;

配置调试在Idea中新建一个remote启动;imageimage

启动调试启动调试; 打一个断点,然后管理后端操作一下;看下效果image

调试成功

项目启动了,也调试成功了; 那么我们就可以方便的开始阅读源码了!


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
JS对象数组中叶子对象和非叶子对象数组(二十五)
JS对象数组中叶子对象和非叶子对象数组(二十五)
92 0
Java集合源码分析之超级接口:Collection
Collection Collection是List、Queue和Set的超集,它直接继承于Iterable,也就是所有的Collection集合类都支持for-each循环。除此之外,Collection也是面向接口编程的典范,通过它可以在多种实现类间转换,这也是面向对象编程的魅力之一。 方法定义 在阅读源码前,我们可以先自行想象一下,如果我们想封装下数组或链表以方便操作,我们需要封装哪些功能呢?比如:统计大小、插入或删除数据、清空、是否包含某条数据,等等。而Collection就是对这些常用操作进行提取,只是其很全面、很通用。下面我们看看它都提供了哪些方法。
75 0
源码阅读之Java栈的实现
栈是 Last-In-First-Out (后进先出)的线性表。对栈的操作主要有两个:入栈(push)和出栈(pop)。因此它也是一种操作受限的线性表。尽管如此,它在计算机中应用非常广泛,是一种非常基础的数据结构。
1072 0
SQL Server遗失管理权限账号密码怎么办?
原文:SQL Server遗失管理权限账号密码怎么办? 假如一个SQL Server实例只允许“SQL身份认证”模式登录数据库,而糟糕的是你忘记了sa的密码(sa出于安全考虑应该被禁用,这里仅仅为了描述问题)或其它具有sysadmin角色的登录名的密码?个人就遇到这样一个案例,HK一同事在一台测试服务器安装了一个测试用途的SQL Server数据库,然后这个同事离职前没有交接这个测试服务器任何信息。
1009 0
IOS播放视频本地的和远程的
http://my.oschina.net/chen106106/blog/48862
597 0
+关注
石臻臻的杂货铺
公众号: 石臻臻的杂货铺,进滴滴群答疑.每周技术专家轮流值班 szzdzhp001
161
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载