2

我正在尝试为具有一些流 API 的 GRPC 服务添加正常关闭。基本上我想在关闭我的应用程序之前等待所有 GRPC 调用完成。流式调用最多可能需要几分钟(大文件上传),而且当前的 GRPC Java 实现似乎不尊重这种用例。

我的服务用 Java 实现并使用 GRPC 1.7.0。所以我只是grpcServer.shutdown()根据文档调用 which 应该:

启动有序关闭,其中先前存在的呼叫继续,但新呼叫被拒绝。

之后我立即打电话grpcServer.awaitTermination()阻止,直到我的服务处于TERMINATED状态。

但是我看到 GRPC 实际上最多等待 5 秒,然后才能在TERMINATED状态下发送服务,即使有活动流也是如此。

所以似乎grpcServer.shutdown()没有按照文档所说的那样做,我想知道我应该做些什么来支持我的用例。我认为 GRPC 应该支持它(似乎是一个很常见的用例)。如果不是,我将需要手动跟踪活动流,这是可行的,看起来不像黑客。

4

1 回答 1

3

这似乎不是那么容易,所以我写了一篇博客文章

TLDR:需要对打开的流进行计数。

于 2018-05-19T19:51:19.633 回答