我正在尝试为具有一些流 API 的 GRPC 服务添加正常关闭。基本上我想在关闭我的应用程序之前等待所有 GRPC 调用完成。流式调用最多可能需要几分钟(大文件上传),而且当前的 GRPC Java 实现似乎不尊重这种用例。
我的服务用 Java 实现并使用 GRPC 1.7.0。所以我只是grpcServer.shutdown()
根据文档调用 which 应该:
启动有序关闭,其中先前存在的呼叫继续,但新呼叫被拒绝。
之后我立即打电话grpcServer.awaitTermination()
阻止,直到我的服务处于TERMINATED
状态。
但是我看到 GRPC 实际上最多等待 5 秒,然后才能在TERMINATED
状态下发送服务,即使有活动流也是如此。
所以似乎grpcServer.shutdown()
没有按照文档所说的那样做,我想知道我应该做些什么来支持我的用例。我认为 GRPC 应该支持它(似乎是一个很常见的用例)。如果不是,我将需要手动跟踪活动流,这是可行的,看起来不像黑客。