【问题标题】:Can we reliably log the result of every gRPC call to our grpc-java server?我们能否可靠地将每次 gRPC 调用的结果记录到我们的 grpc-java 服务器?
【发布时间】:2017-10-30 21:23:54
【问题描述】:

我们有一个自定义的ServerInterceptor 用于记录我们的 grpc-java 服务器接收到的每个调用。它将传递给next::startCallServerCallSimpleForwardingServerCall 包装在一起,该SimpleForwardingServerCall 覆盖close(Status,Metadata),用于记录呼叫状态并跟踪interceptCallclose 之间经过的总时间。我们预计这将导致记录状态并跟踪收到的每个呼叫的经过时间。

我们发现了一种情况,我们的拦截器登录了interceptCall 的主体,然后内部拦截器在其interceptCall 中进行了一些记录,但我们再也没有看到该请求的任何记录。其他上下文表明当时客户端和服务器之间存在连接问题。

我们能否期望每次 RPC 调用都会调用 ServerCall::close(Status,Metadata),而不考虑客户端或连接的不当行为?如果没有,是否还有其他一些我们可能错过的回调表明呼叫已“终止”?

【问题讨论】:

    标签: java grpc grpc-java


    【解决方案1】:

    你想要ServerCall.Listener.onComplete()ServerCall.Listener.onCancel()。在ServerCall.close() 处理成功后调用onComplete()onCancel() 用于任何通信错误或取消。请注意,在应用程序调用ServerCall.close() 之后,可能会收到onCancel()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-27
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      • 2020-09-09
      • 1970-01-01
      • 2017-05-16
      • 2020-11-17
      相关资源
      最近更新 更多