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查询用户的接口,是一个服务提供者
- cloud-demo:微服务的父工程,管理微服务依赖
导入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源码最好还是以官方文档为主,以确保兼容。