gRPC:创建阻止或未来存根

时间:2018-01-24 09:32:41

标签: java future grpc stub grpc-java

最近,我正在研究构建gRPC客户端 - 服务器交互。

我写了一份gRPC服务:

service SearchService {

    rpc Find (SearchReq) returns (SearchRes);

}  

然后我应该使用存根(另一个java应用程序)在客户端调用它。

这两种类型的存根之间的区别是什么?

SearchServiceGrpc.SearchServiceFutureStub futureStub = SearchServiceGrpc.newFutureStub(channel);

SearchServiceGrpc.SearchServiceBlockingStub blockingStub = SearchServiceGrpc.newBlockingStub(channel);

blockingStub.find(request); - 阻止

futureStub.find(request).get(); - 为了将来

我理解java中的Futures是如何工作的, 但是我不明白gRPC里面发生了什么,以及什么类型的存根调用更有效率

我在谷歌上找不到关于它的信息。

谢谢!

1 个答案:

答案 0 :(得分:3)

使用相同的异步API(ClientCall)实现各种存根。您的选择对于grpc内部结构无关紧要。

但API具有正常的预期限制。例如:如果使用阻塞,则在RPC完成之前不能使用该线程。