第一步
使用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。
就可以看到执行结果了。