写点什么

微服务网关:Nacos 源码实践(二)

发布于: 2021 年 04 月 18 日
微服务网关:Nacos源码实践(二)

系列文章:

微服务架构:网关概念与 zuul

微服务网关:Spring Cloud Gateway —— Zuul

微服务网关:Spring Cloud Config- 配置中心

微服务网关方案:Kong & Nacos

Nacos 实践


一 概述

Nacos 实践中,简单介绍了 Nacos 源码的基本结构和 nacos-example 的三个示例。事实上,单单在引入 nacos 的 git 源码这里,就存在一个问题,我们将在本文中详细描述。而后,将以源码方式启动 nacos 控制台并访问主页面,作为对 Nacos 探究的第一步。

二 源码引入时存在的问题

2.1 问题描述

笔者使用的 ide 是 Idea,下载 git 源码到本地后,在 idea 内打开后自动 import 依赖。待所有依赖加载完成后,执行 example 中的应用示例时报错,位置:

com.alibaba.nacos.consistency.ConsistencyProtocol
复制代码

这是 nacos-consistency 模块的一个接口,错误信息:

找不到符号com.alibaba.nacos.consistency.entity.ReadRequest。。。

也就是代码同步的这三个引用:

2.2 问题原因

查看 pom.xml 引入的依赖:

<dependency>    <groupId>${project.groupId}</groupId>    <artifactId>nacos-common</artifactId></dependency><dependency>    <groupId>org.javatuples</groupId>    <artifactId>javatuples</artifactId></dependency><dependency>    <groupId>com.caucho</groupId>    <artifactId>hessian</artifactId></dependency><dependency>    <groupId>com.google.protobuf</groupId>    <artifactId>protobuf-java</artifactId></dependency>
复制代码

并无报错信息,依赖页成功引入,那么为什么还会有包找不到的问题?

搜索之后,在 nacos 源码:https://gitee.com/mirrors/Nacos/的评论中找到答案:

2.3 解决方法

根据上面的提示,找到 Nacos 文档的FAQ,解决方案如下:

找不到符号`com.alibaba.nacos.consistency.entity`

这个包目录是由protobuf在编译时自动生成,您可以通过mvn compile来自动生成他们。如果您使用的是 IDEA,也可以使用 IDEA 的 protobuf 插件。

在 idea 中,我们在 nacos-consistency 的 lifecycle 下执行 compile 即可(也可以在命令行中执行 mvn compile,这是官方提供的解决方法),已确认生效。

2.4 compile 过程简述

从下面的构建日志,可以看到 protobuf 依赖下载后的编译过程:

[INFO] Compiling 2 proto file(s) to /Users/flamingskys/develop/mine/framework/nacos/consistency/target/generated-sources/protobuf/java[INFO] [INFO] --- protobuf-maven-plugin:0.5.0:compile-custom (default) @ nacos-consistency ---Downloading from central: https://repo.maven.apache.org/maven2/io/grpc/protoc-gen-grpc-java/1.24.0/protoc-gen-grpc-java-1.24.0-osx-x86_64.exeDownloaded from central: https://repo.maven.apache.org/maven2/io/grpc/protoc-gen-grpc-java/1.24.0/protoc-gen-grpc-java-1.24.0-osx-x86_64.exe (5.1 MB at 113 kB/s)[INFO] Compiling 2 proto file(s) to /Users/flamingskys/develop/mine/framework/nacos/consistency/target/generated-sources/protobuf/grpc-java[INFO] [INFO] --- maven-resources-plugin:3.0.2:resources (default-resources) @ nacos-consistency ---[INFO] Using 'UTF-8' encoding to copy filtered resources.[INFO] Copying 1 resource[INFO] Copying 2 resources[INFO] Copying 2 resources[INFO] [INFO] --- maven-compiler-plugin:3.5.1:compile (default-compile) @ nacos-consistency ---[INFO] Changes detected - recompiling the module![INFO] Compiling 35 source files to /Users/flamingskys/develop/mine/framework/nacos/consistency/target/classes[INFO] /Users/flamingskys/develop/mine/framework/nacos/consistency/src/main/java/com/alibaba/nacos/consistency/Serializer.java: 某些输入文件使用了未经检查或不安全的操作。[INFO] /Users/flamingskys/develop/mine/framework/nacos/consistency/src/main/java/com/alibaba/nacos/consistency/Serializer.java: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
复制代码

构建结果在 target 下,ReadRequest 内容示例:


三 Nacos 控制台源码启动

3.1 创建数据库

nacos 控制台启动,需要依赖 mysql 环境。初始化语句在 config 模块,resources/META-INF/nacos-db.sql,需要手动创建一下数据库:

/******************************************//*   数据库全名 = nacos_config   *//*   表名称 = config_info   *//******************************************/
复制代码

create database nacos_config; 创建 db 后,使用上述 sql 进行初始化。

3.2 启动配置

直接运行 Nacos.java 会报错,错误信息:

java.io.IOException: java.lang.IllegalArgumentException: db.num is null
复制代码

所以需要启动前配置 JVM 参数,包括 db.num 等参数信息:

-Dnacos.standalone=true-DuseAddressServer=false-Ddb.num=1-Ddb.url=jdbc:mysql://localhost:3306/nacos_config-Ddb.user=nacos-Ddb.password=nacos
复制代码

此时,通过 http://localhost:8848/nacos/index.html#/login 访问,即可看到下面页面:


用户名密码为: nacos nacos,SUBMIT,进入主页:

至此,nacos 启动成功。


发布于: 2021 年 04 月 18 日阅读数: 63
用户头像

磨炼中成长,痛苦中前行 2017.10.22 加入

微信公众号【程序员架构进阶】。多年项目实践,架构设计经验。曲折中向前,分享经验和教训

评论

发布
暂无评论
微服务网关:Nacos源码实践(二)