我们可以可靠地将每个gRPC调用的结果记录到我们的grpc-java服务器吗?

时间:2017-10-30 21:23:54

标签: java grpc grpc-java

我们有一个自定义ServerInterceptor用于记录我们的grpc-java服务器收到的每个调用。它将ServerCall传递给next::startCall,其中SimpleForwardingServerCall覆盖close(Status,Metadata),用于记录呼叫状态并跟踪interceptCall和{之间经过的总时间{1}}。我们希望这会导致记录状态并跟踪每次收到的呼叫的已用时间。

我们发现了一个案例,我们的拦截器记录在close的主体中,然后内部拦截器在其interceptCall中进行了一些记录,但是我们从未看到任何更多的日志记录请求。其他上下文表明当时客户端和服务器之间存在连接问题。

我们是否可以期望为每个RPC调用调用interceptCall,无论客户端或连接错误行为如何?如果没有,是否还有其他一些我们可能错过的回调,表明通话已经死了?"

1 个答案:

答案 0 :(得分:2)

您需要ServerCall.Listener.onComplete()ServerCall.Listener.onCancel()。成功处理onComplete()后调用ServerCall.close()onCancel()用于任何通信错误或取消。请注意,在应用程序调用{​​{1}}之后,可以接收onCancel()