java中使用grpc和protobuf

来源:互联网 发布:第三方支付牌照 知乎 编辑:程序博客网 时间:2024/06/05 21:56

第一步

使用maven,比较简单。依赖项中添加:

<dependency>  <groupId>io.grpc</groupId>  <artifactId>grpc-netty</artifactId>  <version>1.4.0</version></dependency><dependency>  <groupId>io.grpc</groupId>  <artifactId>grpc-protobuf</artifactId>  <version>1.4.0</version></dependency><dependency>  <groupId>io.grpc</groupId>  <artifactId>grpc-stub</artifactId>  <version>1.4.0</version></dependency>

在pom的build中添加插件配置:

具体可以查看文档说明: https://github.com/grpc/grpc-java/
          <plugin>              <groupId>org.xolstice.maven.plugins</groupId>              <artifactId>protobuf-maven-plugin</artifactId>              <version>0.5.0</version>              <configuration>                <protocArtifact>com.google.protobuf:protoc:3.3.0:exe:${os.detected.classifier}</protocArtifact>                <pluginId>grpc-java</pluginId>                <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.4.0:exe:${os.detected.classifier}</pluginArtifact>              </configuration>              <executions>                <execution>                  <goals>                    <goal>compile</goal>                    <goal>compile-custom</goal>                  </goals>                </execution>              </executions>            </plugin>

第二步

执行命令mvn generate-sources
这里会下载对应的protobuf编译器,和grpc的生成插件。

>>>mvn generate-sources[INFO] Scanning for projects...[INFO] ------------------------------------------------------------------------[INFO] Detecting the operating system and CPU architecture[INFO] ------------------------------------------------------------------------[INFO] os.detected.name: osx[INFO] os.detected.arch: x86_64[INFO] os.detected.classifier: osx-x86_64[INFO]                                                                         [INFO] ------------------------------------------------------------------------[INFO] Building grpc 1.0-SNAPSHOT[INFO] ------------------------------------------------------------------------[INFO] [INFO] --- protobuf-maven-plugin:0.5.0:compile (default) @ grpc ---Downloading: https://repo.maven.apache.org/maven2/com/google/protobuf/protoc/3.3.0/protoc-3.3.0.pomDownloaded: https://repo.maven.apache.org/maven2/com/google/protobuf/protoc/3.3.0/protoc-3.3.0.pom (4 KB at 0.7 KB/sec)Downloading: https://repo.maven.apache.org/maven2/com/google/protobuf/protoc/3.3.0/protoc-3.3.0-osx-x86_64.exe1932/4958 KB   Downloaded: https://repo.maven.apache.org/maven2/com/google/protobuf/protoc/3.3.0/protoc-3.3.0-osx-x86_64.exe (4958 KB at 40.7 KB/sec)[INFO] Compiling 1 proto file(s) to /Users/david/grpc/grpc_example/grpc-java-example/target/generated-sources/protobuf/java[INFO] [INFO] --- protobuf-maven-plugin:0.5.0:compile-custom (default) @ grpc ---Downloading: https://repo.maven.apache.org/maven2/io/grpc/protoc-gen-grpc-java/1.4.0/protoc-gen-grpc-java-1.4.0.pomDownloaded: https://repo.maven.apache.org/maven2/io/grpc/protoc-gen-grpc-java/1.4.0/protoc-gen-grpc-java-1.4.0.pom (2 KB at 3.1 KB/sec)Downloading: https://repo.maven.apache.org/maven2/io/grpc/protoc-gen-grpc-java/1.4.0/protoc-gen-grpc-java-1.4.0-osx-x86_64.exeDownloaded: https://repo.maven.apache.org/maven2/io/grpc/protoc-gen-grpc-java/1.4.0/protoc-gen-grpc-java-1.4.0-osx-x86_64.exe (4263 KB at 24.1 KB/sec)[INFO] Compiling 1 proto file(s) to /Users/david/grpc/grpc_example/grpc-java-example/target/generated-sources/protobuf/grpc-java[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 05:06 min[INFO] Finished at: 2017-08-28T11:17:53+08:00[INFO] Final Memory: 9M/182M[INFO] ------------------------------------------------------------------------>>>

这步操作会生成protoco对应的java消息和数据结构,已经grpc相关的stub源文件。

maven会在.m2/repository/io/grpc/protoc-gen-grpc-java/1.4.0下载plugin文件protoc-gen-grpc-java-1.4.0-osx-x86_64.exe,根据最新版本的不同而文件版本不同。

在程序的目录target下,也会下载一份protoc和grpc的plguin文件比如我的mac系统下,对应的2个文件如下的命令行所示。

可以使用命令

 target/protoc-plugins/protoc-3.3.0-osx-x86_64.exe -I ../../  --java_out ../../grpc-java/ --plugin=protoc-gen-grpc-java=target/protoc-plugins/protoc-gen-grpc-java-1.4.0-osx-x86_64.exe  --grpc-java_out=../../grpc_java_hello  ../../hello.proto 

Note 要是需要protoc和grpc-java-plugin生成grpc的stub源码,要使用–grpc-java_out参数,否则,没有对应的grpc-stub源码生成。


第三步

将生成的java文件都添加到工程的源码管理中,让工程可以使用这些自动生成的源码。

修改server和client的逻辑

在client和server添加自己的业务逻辑。让client可以通过grpc,使用protobuf传递消息,调用server端方法。

比如我们的proto文件定义:

service Greeter {    rpc sayHello(helloRequest) returns (helloResponse) {}}message helloRequest {    string name=1;}message helloResponse {    string greet=1;}

执行及测试

因为grpc的应用依赖项比较多,简单的执行方法就是在开发IDE环境中启动执行。

  • 先以Java Application的方式启动server。
  • 再以java Application的方式启动client。

就可以看到执行结果了。

原创粉丝点击