首页 > 解决方案 > 在 gRPC Java 应用程序中使客户端流同步/阻塞

问题描述

我想使客户端流式传输阻塞。该协议的定义如下所示:

rpc RecordRoute(stream Point) 返回 (RouteSummary) {}

正如文档中所说,对于某些类型的流式调用,只能使用异步存根:

对服务器进行非阻塞调用的非阻塞/异步存根,其中异步返回响应。您只能使用异步存根进行某些类型的流式调用。

那么我怎样才能使调用阻塞/同步呢?可能吗?

标签: javagrpcgrpc-java

解决方案


阻塞存根只能用于客户端仅发送单个请求的 RPC。对于客户端流式调用,您只能使用异步存根。生成的阻塞存根代码不包含客户端流式传输或双向流式传输方法的 RPC 方法。

如果你想避免由于异步请求造成的过度缓冲,你可以使用CallStreamObServerAPI 来做手动流控制。对于一些外部同步,例如 a CountDownLatch,异步 API 可以同步运行。了解gRPC 的手动流控制示例是如何工作的。


推荐阅读