java中使用grpc和protobuf

3 篇文章 0 订阅
3 篇文章 0 订阅

第一步

使用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.pom
Downloaded: 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.exe
1932/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.pom
Downloaded: 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.exe
Downloaded: 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。

就可以看到执行结果了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值