青训营笔记|大数据方向--分布式文件存储系统开发(4)

142 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第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下看到对应的文件了,文件目录结构如下

image.png
展开后如下

image.png
这样我们就可以把这些文件复制到需要的地方了

 写到这里,发现如果一次写完的话就太长了,剩下的下一次再写吧