这是我参与「第四届青训营 」笔记创作活动的的第4天
上回讲到了分布式存储系统所用的Netty框架,这次我们学习一下基于Netty这个网络通信框架的grpc框架
首先明确Netty与rpc的关系,在我的理解里,Netty是比较基本的网络通信工具,而grpc是使用Netty构建的更加容易使用的一个工具
grpc的使用需要导入几个包,由于过程中使用了protobuf,我们还需要下载相关软件,在java的maven项目的pom.xml文件中导入几个包
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-all</artifactId>
<version>1.39.0</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.19.4</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.2</version>
</dependency>
下载用于proto文件的软件protoc.exe与protoc-gen-grpc-java-{version}-{os}.exe
提供度盘的下载链接
链接:pan.baidu.com/s/1u1CJ-7LC…
提取码:1234
先把两个软件放在同一个文件夹下,然后在这个文件夹下我们写一个消息对象与服务(protobuf用的比较简单,可以自己在网上查一下语法)
GrpcServiceModel.proto文件的内容如下
syntax = "proto3";
package com.li.rpc; // 自己所在的包
option java_multiple_files = true;
option java_package = "com.li.rpc.domain"; // 输出文件所在的包
option java_outer_classname = "GrpcServiceModel"; // 输出的类名
message DataRequest{
string instanceId = 1; // 这里的1,2,3仅代表序号,不是赋值
string name = 2;
string data = 3;
}
message DataResponse{
string instanceId = 1;
string message = 2;
}
GrpcServiceApis.proto文件的内容如下
syntax = "proto3";
package com.li.rpc;
option java_multiple_files = true;
option java_package = "com.li.rpc.rpcservice";
option java_outer_classname = "GrpcServer";
import "GrpcServiceModel.proto";
service GrpcServiceApis {
rpc getName(DataRequest) returns (DataResponse){};
}
第一个文件定义了要传送消息的实体,第二个文件定义了要提供的服务
然后我们在这个文件夹下执行命令
生成消息对象
protoc --proto_path=. --java_out=. *.proto
生成grpc接口
protoc.exe --plugin=protoc-gen-grpc-java=protoc-gen-grpc-java-1.39.0.exe --grpc-java_out=. --proto_path=. *.proto
之后就可以在文件夹com.li.rpc下看到对应的文件了,文件目录结构如下
展开后如下
这样我们就可以把这些文件复制到需要的地方了
写到这里,发现如果一次写完的话就太长了,剩下的下一次再写吧