一、介绍
Protocol Buffer是Google的语言中立的,平台中立的,可扩展机制的,用于序列化结构化数据 - 对比XML,但更小,更快,更简单。您可以定义数据的结构化,然后可以使用特殊生成的源代码轻松地在各种数据流中使用各种语言编写和读取结构化数据。
官网地址:https://developers.google.com/protocol-buffers/
二、下载(非必要)
下载地址:https://github.com/protocolbuffers/protobuf/releases
1、windows的java下载:protoc-x.x.x-win64.zip的版本
2、解压后,将protoc-3.9.0-win64\bin添加到环境变量中
3、验证安装是否成功
protoc --version
三、idea安装protobuf插件(非必要)
在File”–>“Settings”–>"Plugins"中搜索Protobuf Support插件
四、使用
1、添加maven依赖
<properties>
<os.detected.classifier>windows-x86_64</os.detected.classifier>
<grpc.version>1.15.0</grpc.version>
<protobuf.version>3.6.1</protobuf.version>
</properties>
<dependencies>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty</artifactId>
<version>${grpc.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>${grpc.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-stub</artifactId>
<version>${grpc.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>${protobuf.version}</version>
</dependency>
</dependencies>
2、添加maven插件
<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.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.5.0</version>
<configuration>
<protocArtifact>com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}</protocArtifact>
<pluginId>grpc-java</pluginId>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>compile-custom</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
3、创建定义文件
在src/main文件夹下建立一个proto文件夹,然后在该文件夹新建一个user.proto文件,此文件定义我们需要传输的文件。
使用grpc方式编译.proto时,会默认扫描src/main/proto文件夹下的protobuf文件。
proto3完整语法:https://www.cnblogs.com/sanshengshui/p/9739521.html
需要定义一个用户的信息,包含的字段主要有编号、名称、年龄。需要注意一点的是proto文件和生成的Java文件名称不能一致!
//proto3语法注解:如果您不这样做,protobuf编译器将假定您正在使用proto2,这必须是文件的第一个非空的非注释行。
syntax = "proto3";
//生成的包名
option java_package = "com.sanshengshui.netty.protobuf";
//生成的java名
option java_outer_classname = "UserMsg";
message User{
//ID
int32 id = 1;
//姓名
string name = 2;
//年龄
int32 age = 3;
//状态
int32 state = 4;
}
4、使用maven创建对象
mvn clean compile
5、直接在代码中使用
@GetMapping("/test1")
public void test1(UserMsg.User user) {
int age = user.getAge();
UserMsg.User build = UserMsg.User.newBuilder().setAge(1).setId(2).build();
}