在gRPC Java应用程序中使客户端流同步/阻塞

时间:2020-07-13 17:05:16

标签: java grpc grpc-java

我想进行客户端流阻止。该协议的定义如下所示:

rpc RecordRoute(流点)返回(RouteSummary){}

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

一个非阻塞/异步存根,它对服务器进行非阻塞调用,在该服务器上异步返回响应。 您只能使用异步存根进行某些类型的流式通话。

那我怎样才能使该呼叫阻塞/同步?有可能吗?

1 个答案:

答案 0 :(得分:1)

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

如果要避免由于异步请求而导致过多的缓冲,可以使用CallStreamObServer API进行手动流控制。通过某些外部同步(例如CountDownLatch),异步API可以同步运行。了解gRPC's manual flow control example的工作原理。