gRPC java实现v0.15可能会丢失数据,是否在v1中修复了?背压?

时间:2016-11-29 22:34:05

标签: grpc

当我使用gRPC(java版)的v0.15时,我遇到了一个问题,即如果客户端很慢,那么一些数据可能会丢失。即服务器发出让我们说5密尔的记录和客户端收到大约80%。

为了处理这种情况,我必须实现本地'缓冲区',如果我想使用gRPC在微服务之间进行通信,这对我来说似乎是一个问题。

我想知道这个问题是在v1中修复的吗?我记得我在gRPC讨论中看过(googled)相应的问题,但现在找不到它。

我认为它与背压有某种关联,我们是否在开箱即用的gRPC中有背压?在我的测试1.0.2打击与io.netty.util.internal.OutOfDirectMemoryError: 我应该手动实施背压吗?

1 个答案:

答案 0 :(得分:1)

仅发送消息并不意味着客户已收到消息。 ClientCall和ServerCall API将其描述为:

  

没有提供确定消息接收或提供确认的通用方法。期望应用程序对这些信号使用正常的有效载荷消息,因为响应自然地确认了它的请求。

我同意你的问题似乎与流量控制/背压有关。您应该将StreamObserver转换为ServerCallStreamObserver并使用setOnReadyHandler()isReady()来控制内存使用量。有Ripgrep