gRPC动手实践

创建Maven项目

使用IDEA作为gRPC的开发IDE,新建一个空的maven工程(不从archetype原型生成)。

创建完成之后,修改pom.xml,向其中添加gRPC-java的依赖和protoc插件项:

gRPC动手实践_第1张图片

gRPC-java的依赖:

    <dependencies>
        <dependency>
            <groupId>io.grpcgroupId>
            <artifactId>grpc-allartifactId>
            <version>${grpc-version}version>
        dependency>
    dependencies>

protocol buffers编译插件项:

    <build>
        <extensions>
            <extension>
                <groupId>kr.motd.mavengroupId>
                <artifactId>os-maven-pluginartifactId>
                <version>1.4.1.Finalversion>
            extension>
        extensions>
        <plugins>
            <plugin>
                <groupId>org.xolstice.maven.pluginsgroupId>
                <artifactId>protobuf-maven-pluginartifactId>
                <version>0.5.0version>
                <configuration>
                    
                    <protocArtifact>com.google.protobuf:protoc:3.0.0:exe:${os.detected.classifier}protocArtifact>
                    <pluginId>grpc-javapluginId>
                    <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.0.0:exe:${os.detected.classifier}pluginArtifact>
                configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>compilegoal>
                            <goal>compile-customgoal>
                        goals>
                    execution>
                executions>
            plugin>
        plugins>
    build>

注意,这里我用的我自己编译生成,然后安装到本地Maven库中的grpc-all的jar包

因此,我这里写的是 1.1.0-SNAPSHOT

grpcversion

大家如果不想自己编译的话,可以使用目前Maven官方仓库中最新的版本:1.0.0。
第二点,注意这里的版本:

gRPC动手实践_第2张图片

上边绿色字体的注释中规定,我们的protoc的版本要和protobuf-java jar包的版本一致。也就是说我们这里如果写了3.0.0(第一个红框内,注:我这里给出的例子使用的是3.0.0,而官方给出的是3.0.0-beta-3),那么下边这个地方也要是3.0.0:

gRPC动手实践_第3张图片

这些都准备完成之后,我们可以在Maven本地仓库中看到,它会自动下载平台相关的相应版的protoc的exe程序,这里是3.0.0正式版的:

gRPC动手实践_第4张图片

配置文件中给出的

${os.detected.classifier}

在我的机器上被解析为 windows-x86_64 了,这些都是上边的那个扩展插件的作用:

gRPC动手实践_第5张图片

编写服务.proto文件

接下来,需要添加.proto文件。

打开Project Structure—》Modules,先在src/main目录下新建一个文件夹proto,用来存放我们马上将要创建的proto文件。

gRPC动手实践_第6张图片

然后新建一个名叫hello.proto文件,按照官方教程中的样子,编写一个自定义的grpc服务。

gRPC动手实践_第7张图片

编译.proto文件

编译.proto文件的工作由protoc的Maven插件编译来完成,它会调用指定路径下protoc.exe解析.proto,并生成我们编写客户端和服务端代码基础。

由于protoc可执行程序是平台相关的,因此这里给出两种配置方式:
1. 使用protobuf-maven-plugin自己指定的protc可执行程序。这种方式,什么都不用配置,只需要把plugin加进我们的pom.xml中就行了,插件会自己下载需要的可执行程序,在maven的本地仓库中,我们可以找到:

gRPC动手实践_第8张图片

以及

gRPC动手实践_第9张图片

  1. 手动下载protc可执行程序
    我们也可以自己从github上,去下载相应版本的protoc。在这里,找到3.0版本:

gRPC动手实践_第10张图片

下边的Download列表中选择你自己平台需要的可执行程序下载包进行下载,由于我是在windows平台上编译,所以我选择protoc-3.0.0-win32.zip:

gRPC动手实践_第11张图片

完成之后,解压,可以看到bin下的exe执行文件:

protobuf bin

说明你已经下载成功了,接着最后在我们的pom.xml中告诉protobuf-maven-plugin插件我们的可执行程序的路径:

gRPC动手实践_第12张图片

gRPC动手实践_第13张图片

注意:左侧我们在pom.xml中看到的有两个goal,此时选择第二个compile-custom,对hello.proto的修改在重新编译的时候才会生效,否则不会在target/generated-sources/protobuf/grpc-java目录下生成一个叫GreeterGrpc.java的文件。

编译提示:

gRPC动手实践_第14张图片

然后执行compile goal生成HelloRequest、HelloReply等java类,在target/generated-sources/protobuf/java目录下。

gRPC动手实践_第15张图片

编译提示:

gRPC动手实践_第16张图片

target目录下的就是编译生成的结果:

gRPC动手实践_第17张图片

最后,由于生成的代码中有

@java.lang.Override

这种注释,在JDK1.8中有问题,按住 Alt+Enter键,修改jdk语言级别为6:

gRPC动手实践_第18张图片

编译生成的代码

由于我们上边规定了option:java_multiple_filestrue,因此在编译完成之后,会生成多个Message类,它们并没有被包含在HelloProto.java文件中。
每个Message类,拿HelloRequest来说,它实现了Message和MessageOrBuilder接口:

gRPC动手实践_第19张图片

由proto3语法定义的类继承自GeneratedMessageV3,实现了HelloRequestOrBuilder接口。

gRPC动手实践_第20张图片

HelloRequestOrBuilder继承了MessageOrBuilder接口,这个类的代码非常简短:

gRPC动手实践_第21张图片

另外一个比较重要的类是GreeterGrpc.java文件。

gRPC动手实践_第22张图片

你可能感兴趣的:(编译开发,Gradle)