grpc之Java实战proto文件篇
proto文件的编写
什么是protobuf
协议缓冲区(protobuf)提供了一种语言中立、平台中立、可扩展的机制,用于以向前兼容和向后兼容的方式序列化结构化数据。它类似于 JSON,只是它更小更快,并且生成本地语言绑定。
协议缓冲区是定义语言(在 .proto文件中创建)、proto 编译器生成的与数据接口的代码、特定于语言的运行时库以及写入文件(或通过网络连接)。
proto文件的编写
这一句代码的意思是使用哪一种语法,我们一般是用proto3
syntax = "proto3";
这个是是否生成多个类,其实本质上是没有什么太大的区别的,默认值是生成一个,建议也是大家生成一个,方便管理
option java_multiple_files = true;
生成源代码所在包包名
option java_package = "com.keke.news.proto";
最外层类类名
option java_outer_classname = "HelloProto";
最终的proto文件就是这样
//使用proto3语法
syntax = "proto3";
//@2 生成多个类(defail false)
//option java_multiple_files = true;
//生成Java所在类的包
option java_package = "com.xj.news.proto";
//生成外层类类名
option java_outer_classname = "HelloProto";
//option objc_class_prefix = "HL";
//proto类名
package news;
//定义grpc服务RouteGuide
service NewsService {
// list方法名,NewsRequest代表传入的参数,NewsResponse 代表返回的响应
rpc list (NewsRequest) returns (NewsResponse) {}
}
// The request message containing the user's name.
//类型于Java中的实体类
message NewsRequest {
string date =1 ; // =1 其实是编号,
}
// The response message containing the greetings
message NewsResponse {
repeated News news = 1;
}
//News 新闻实体对象
message News{
int32 id =1;
string title =2 ;
string content =3;
int64 createTime =4;
}
通过proto文件生成代码需要的pom依赖
那么我们通过proto文件生成Java源代码需要那些依赖内?
<properties>
<grpc.version>1.29.0</grpc.version>
<protobuf.version>3.11.0</protobuf.version>
</properties>
<dependencies>
<!-- grpc-netty 底层的通讯组件-->
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty-shaded</artifactId>
<version>${grpc.version}</version>
</dependency>
<!-- grpc对protobuf的支持工具包-->
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>${grpc.version}</version>
</dependency>
<!--存根,通过这个处理存根-->
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-stub</artifactId>
<version>1.29.0</version>
</dependency>
<!--注解-->
<dependency> <!-- necessary for Java 9+ -->
<groupId>org.apache.tomcat</groupId>
<artifactId>annotations-api</artifactId>
<version>6.0.53</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<extensions>
<extension>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.5.0.Final</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.0.1.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<!-- 通过定义的环境变量找到具体的protobuf编译器位置-->
<groupId>org.xolstice.maven.plugins</groupId>
<!-- 通过这个插件maven自动根据proto文件生成Java代码-->
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.5.1</version>
<configuration>
<!-- 用来编译生成文件-->
<protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}
</protocArtifact>
<pluginId>grpc-java</pluginId>
<!-- 用于生成grpc的工具类,用于简化实际的数据处理过程,生成的代码简化程序开发工作-->
<pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}
</pluginArtifact>
<protoSourceRoot>proto</protoSourceRoot>
</configuration>
<executions>
<execution>
<goals>
<!-- 生成消息代码-->
<goal>compile</goal>
<!-- 生成grpc的通讯文件-->
<goal>compile-custom</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
protobuf插件在idea的安装
- 点击File选择setting
- 点击piugins输入protobuf点击install进行安装,可能需要重启idea,完成后点击OK即可
当你安装完成.你的.proto文件将会变成带图标的