前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务网关:Nacos 源码实践

微服务网关:Nacos 源码实践

作者头像
程序员架构进阶
发布2021-04-29 11:15:01
1.1K0
发布2021-04-29 11:15:01
举报
文章被收录于专栏:架构进阶架构进阶

系列文章:

微服务架构:网关概念与 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 中的应用示例时报错,位置:

代码语言:javascript
复制
com.alibaba.nacos.consistency.ConsistencyProtocol

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

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

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

2.2 问题原因

查看 pom.xml 引入的依赖:

代码语言:javascript
复制
<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 依赖下载后的编译过程:

代码语言:javascript
复制
[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.exe
Downloaded 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,需要手动创建一下数据库:

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

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

3.2 启动配置

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

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

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

代码语言:javascript
复制
-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-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员架构进阶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 概述
  • 二 源码引入时存在的问题
    • 2.1 问题描述
      • 2.2 问题原因
        • 2.3 解决方法
          • 2.4 compile 过程简述
          • 三 Nacos 控制台源码启动
            • 3.1 创建数据库
              • 3.2 启动配置
              相关产品与服务
              对象存储
              对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档