专栏首页架构进阶微服务网关:Nacos 源码实践

微服务网关: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.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,需要手动创建一下数据库:

/******************************************/
/*   数据库全名 = 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 启动成功。

本文分享自微信公众号 - 程序员架构进阶(flaming28sky),作者:程序员架构进阶

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-04-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

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

    微服务架构:网关概念与 zuul 微服务网关:Spring Cloud Gateway —— Zuul

    程序员架构进阶
  • 微服务网关方案:Kong & Nacos

    前面我们介绍了 Spring Cloud 体系下的网关 Gateway(Zuul)。事实上,还有很多开源且广泛应用的网关方案,例如 Kong 和 Nacos。本...

    程序员架构进阶
  • 微服务网关方案:Kong & Nacos

    文章连接:https://mp.weixin.qq.com/s/Kk6Cl7n0sFGgCyyZtExa6A

    程序员架构进阶
  • 虎牙直播在微服务改造方面的实践和总结

    相比文字和图片,直播提供了人与人之间更丰富的沟通形式,其对平台稳定性的考验很大,那么倡导“以技术驱动娱乐”的虎牙直播(以下简称“虎牙”)是如何在技术上赋能娱乐,...

    程序猿DD
  • 爱奇艺微服务标准技术架构实践

    为数以亿计的用户提供优质的视频服务的爱奇艺技术产品团队,为了适应业务的快速迭代和创新,并支撑海量的用户请求,很多团队都对各自的业务系统自发地进行了微服务架构的改...

    开发者技术前线
  • Nacos 集群部署模式最佳实践

    Nacos 支持两种部署模式:单机模式和集群模式。在实践中,我们往往习惯用单机模式快速构建一个 Nacos 开发/测试环境,而在生产中,出于高可用的考虑,一定需...

    kirito-moe
  • Sentinel Gateway Nacos 网关限流三剑客

    顾名思义,网关限流是通过网关层对我们的服务进行限流,达到保护后端服务的作用。在微服务架构的系统中,网关层可以屏蔽外部的请求直接对服务进行调用,网关层可以对内部服...

    程序猿小亮
  • 微服务治理实践:服务查询

    本文是《微服务治理实践》系列篇的第二篇文章,为大家介绍如何实现服务查询。该系列文章基于阿里云商业化产品 EDAS 的微服务实践,如果你的团队具备较强的微服务治理...

    kirito-moe
  • Kubernetes Nacos

    Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

    py3study

扫码关注云+社区

领取腾讯云代金券