nacos源码分析

下载Nacos源码

访问GitHub官网地址:https://github.com/alibaba/nacos
找到其release页面:https://github.com/alibaba/nacos/tags
找到其中的1.4.2.版本:

点击进入后,下载Source code(zip):

导入Demo工程

这里不做演示,可以自己建一个:

结构说明:

  • cloud-source-demo:项目父目录
    • cloud-demo:微服务的父工程,管理微服务依赖
      • order-service:订单微服务,业务中需要访问user-service,是一个服务消费者
      • user-service:用户微服务,对外暴露根据id查询用户的接口,是一个服务提供者

导入Nacos源码

将之前下载好的Nacos源码解压到cloud-source-demo项目目录中:

然后,使用IDEA将其作为一个module来导入:
1)选择项目结构选项:

然后点击导入module:

在弹出窗口中,选择nacos源码目录:

然后选择maven模块,finish:

最后,点击OK即可:

导入后的项目结构:

proto编译

Nacos底层的数据通信会基于protobuf对数据做序列化和反序列化。并将对应的proto文件定义在了consistency这个子模块中:我们需要先将proto文件编译为对应的Java代码。
因为nacos集群之间是要相互通信的,而通信的底层采用的协议不是基于http协议,而是基于netty自己实现的一套协议,这个协议就会规定请求传输的格式、数据对象等等,这些数据对象就是基于protobuf来处理的。

什么是protobuf

protobuf的全称是Protocol Buffer,是Google提供的一种数据序列化协议,这是Google官方的定义:
Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据序列化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。
可以简单理解为,是一种跨语言、跨平台的数据传输格式。与json的功能类似,但是无论是性能,还是数据大小都比json要好很多。

protobuf的之所以可以跨语言,就是因为数据定义的格式为.proto格式,需要基于protoc编译为对应的语言。

安装protoc

Protobuf的GitHub地址:https://github.com/protocolbuffers/protobuf/releases
我们可以下载windows版本的来使用:

我们将下载好的文件解压到任意非中文目录下,其中的bin目录中的protoc.exe可以帮助我们编译:

然后将这个bin目录配置到你的环境变量path中,可以参考JDK的配置方式:

编译proto

进入nacos-1.4.2的consistency模块下的src/main目录下:

然后打开cmd窗口,运行下面的两个命令:
protoc --java_out=./java ./proto/consistency.proto
protoc --java_out=./java ./proto/Data.proto

会在nacos的consistency模块中编译出这些java代码:

运行

nacos服务端的入口是在console模块中的Nacos类:

我们需要让它单机启动:

然后新建一个SpringBootApplication:

然后填写应用信息:

然后直接启动nacos:

兼容性

nacos源码版本可能和maven版本有关系,因此建议下载nacos时,有必要看一下官方的文档,以确保和你本地的maven版本一致,不然会报maven的各种插件错误。
nacos-1.4.2目前和maven-3.3.9兼容,如果你的maven时3.6.1或者更高的版本可能会报兼容性错误。所以导入nacos源码最好还是以官方文档为主,以确保兼容。

posted @ 2023-06-29 19:28  xycccode  阅读(119)  评论(0编辑  收藏  举报