【发布时间】:2017-10-30 21:23:54
【问题描述】:
我们有一个自定义的ServerInterceptor 用于记录我们的 grpc-java 服务器接收到的每个调用。它将传递给next::startCall 的ServerCall 与SimpleForwardingServerCall 包装在一起,该SimpleForwardingServerCall 覆盖close(Status,Metadata),用于记录呼叫状态并跟踪interceptCall 和close 之间经过的总时间。我们预计这将导致记录状态并跟踪收到的每个呼叫的经过时间。
我们发现了一种情况,我们的拦截器登录了interceptCall 的主体,然后内部拦截器在其interceptCall 中进行了一些记录,但我们再也没有看到该请求的任何记录。其他上下文表明当时客户端和服务器之间存在连接问题。
我们能否期望每次 RPC 调用都会调用 ServerCall::close(Status,Metadata),而不考虑客户端或连接的不当行为?如果没有,是否还有其他一些我们可能错过的回调表明呼叫已“终止”?
【问题讨论】: