JAVA使用Protobuf GRPC

发布时间 2023-08-22 16:11:09作者: xiondun
  • IDEA安装Protobuf插件

  • 引入maven依赖
<dependency>
	<groupId>com.google.protobuf</groupId>
	<artifactId>protobuf-java</artifactId>
	<version>3.19.1</version>
</dependency>

protobuf是目前比较新的版本,之前测试过程中使用3.9.1。发现生成的源代码中,某些函数报错,调用不了,是因为函数在该版本声明为protected,其他地方调用不了。

  • maven中protobuf plugin
                       <plugin>
				<groupId>org.xolstice.maven.plugins</groupId>
				<artifactId>protobuf-maven-plugin</artifactId>
				<version>0.6.1</version>

				<configuration><!-- proto文件目录 -->
					<protoSourceRoot>${project.basedir}/src/main/proto</protoSourceRoot>
					<!-- 生成的Java文件目录 -->
					<outputDirectory>${project.basedir}/src/main/java/</outputDirectory>
					<clearOutputDirectory>false</clearOutputDirectory>
					<!--<outputDirectory>${project.build.directory}/generated-sources/protobuf</outputDirectory>-->
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>compile</goal>
							<goal>test-compile</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

在maven中的build中的plugins中添加上面插件。

protoSourceRoot指定*.proto定义的消息文件路径。

outputDirectory指定输出的java文件地址。默认是输出到target中。

clearOutputDirectory是否清空输出文件,默认为是,如果是,outputDirectory下的项目工程会被清空

  • 定义消息文件
syntax = "proto3";

package protocol;

option go_package = "protocol";
option java_package = "com.kone.pbdemo.protocol";

message File {
  string name = 1;
  int32 size = 2;
}
  • 编译protobuf文件

可以查看文件输出

  • 测试
public class PbTest {
    public static void main(String[] args) {
        FileOuterClass.File file = FileOuterClass.File.newBuilder()
                .setName("fileName")
                .setSize(200)
                .build();
        System.out.println(file);
    }
}
  • proto文件导入插件显示问题

在*.proto文件中导入其他proto文件,提示未找到文件问题。

在Setting => Languates & Frameworks => Protocol Buffers中添加proto路径

找不到文件的提示就会消失: