生活随笔
收集整理的這篇文章主要介紹了
java中使用grpc和protobuf
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第一步
使用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。
就可以看到執行結果了。
總結
以上是生活随笔為你收集整理的java中使用grpc和protobuf的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。