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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 在我们去阅读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中

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

image.png

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

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

检查启动是否成功

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

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

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

Nacos 基于Namespace 帮助用户逻辑隔离多个命名空间,这可以帮助用户更好的管理测试、预发、生产等多环境服务和配置,让每个环境的同一个配置(如数据库数据源)可以定义不同的值。这个命名空间的数据就是存在表 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类型
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 操作类型,增改删

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 &

重新启动

先把项目停止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启动;

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

调试成功

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


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
Cloud Native Java Nacos
微服务时代的新宠儿!Spring Cloud Nacos实战指南,带你玩转服务发现与配置管理,拥抱云原生潮流!
【8月更文挑战第29天】Spring Cloud Nacos作为微服务架构中的新兴之星,凭借其轻量、高效的特点,迅速成为服务发现、配置管理和治理的首选方案。Nacos(命名和配置服务)由阿里巴巴开源,为云原生应用提供了动态服务发现及配置管理等功能,简化了服务间的调用与依赖管理。本文将指导你通过五个步骤在Spring Boot项目中集成Nacos,实现服务注册、发现及配置动态管理,从而轻松搭建出高效的微服务环境。
842 0
|
Java Nacos 数据库
nacos源码打包及相关配置
nacos源码打包及相关配置
777 4
|
Dubbo Cloud Native 应用服务中间件
阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。
在云原生时代,微服务架构成为主流。阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。示例代码展示了如何在项目中实现两者的整合,通过 Nacos 动态调整服务状态和配置,适应多变的业务需求。
575 2
|
数据管理 Nacos 开发者
"Nacos架构深度解析:一篇文章带你掌握业务层四大核心功能,服务注册、配置管理、元数据与健康检查一网打尽!"
【10月更文挑战第23天】Nacos 是一个用于服务注册发现和配置管理的平台,支持动态服务发现、配置管理、元数据管理和健康检查。其业务层包括服务注册与发现、配置管理、元数据管理和健康检查四大核心功能。通过示例代码展示了如何在业务层中使用Nacos,帮助开发者构建高可用、动态扩展的微服务生态系统。
522 0
|
Java 数据库连接 Nacos
nacos配置管理拉取不到配置异常
在搭建Nacos配置时遇到异常,因配置了`file-extension: yaml`,服务尝试拉取`shared-jdbc.yaml`, `shared-log.yaml`, `shared-swagger.yaml`,但Nacos中这些共享配置的Data ID无后缀。修正方法是确保Data ID与预期文件名一致,包括.yaml扩展名。在验证中,修改了部分Data ID并导致服务因找不到未加后缀的`jdbc`配置而报错,提示在配置Data ID时应包含文件扩展名。
1015 1
|
Java Nacos 数据格式
Spring Cloud Nacos 详解:服务注册与发现及配置管理平台
Spring Cloud Nacos 详解:服务注册与发现及配置管理平台
1110 3
|
负载均衡 Nacos 数据库
【Nacos】配置管理、微服务配置拉取、实现配置热更新、多环境配置
【Nacos】配置管理、微服务配置拉取、实现配置热更新、多环境配置
910 1
|
关系型数据库 MySQL Java
“惊呆了!无需改动Nacos源码,轻松实现SGJDBC连接MySQL?这操作太秀了,速来围观,错过等哭!”
【8月更文挑战第7天】在使用Nacos进行服务治理时,常需连接MySQL存储数据。使用特定的SGJDBC驱动连接MySQL时,一般无需修改Nacos源码。需确保SGJDBC已添加至类路径,并在Nacos配置文件中指定使用SGJDBC的JDBC URL。示例中展示如何配置Nacos使用MySQL及SGJDBC,并在应用中通过Nacos API获取配置信息建立数据库连接,实现灵活集成不同JDBC驱动的目标。
488 0
|
开发框架 .NET Nacos
使用 Nacos 在 C# (.NET Core) 应用程序中实现高效配置管理和服务发现
使用 Nacos 在 C# (.NET Core) 应用程序中实现高效配置管理和服务发现
2134 0
|
SpringCloudAlibaba 安全 Java
SpringCloudalibaba之Nacos的配置管理
如图所示,nacos-config-example被192.168.56.1获取过。
750 0

热门文章

最新文章