当我使用gRPC(java版)的v0.15时,我遇到了一个问题,即如果客户端很慢,那么一些数据可能会丢失。即服务器发出让我们说5密尔的记录和客户端收到大约80%。
为了处理这种情况,我必须实现本地'缓冲区',如果我想使用gRPC在微服务之间进行通信,这对我来说似乎是一个问题。
我想知道这个问题是在v1中修复的吗?我记得我在gRPC讨论中看过(googled)相应的问题,但现在找不到它。
我认为它与背压有某种关联,我们是否在开箱即用的gRPC中有背压?在我的测试1.0.2打击与io.netty.util.internal.OutOfDirectMemoryError: 我应该手动实施背压吗?
答案 0 :(得分:1)
仅发送消息并不意味着客户已收到消息。 ClientCall和ServerCall API将其描述为:
没有提供确定消息接收或提供确认的通用方法。期望应用程序对这些信号使用正常的有效载荷消息,因为响应自然地确认了它的请求。
我同意你的问题似乎与流量控制/背压有关。您应该将StreamObserver
转换为ServerCallStreamObserver
并使用setOnReadyHandler()
和isReady()
来控制内存使用量。有Ripgrep。