Package io.grpc

Interface ClientInterceptor

  • All Known Implementing Classes:
    MonitoringClientInterceptor

    @ThreadSafe
    public interface ClientInterceptor
    Interface for intercepting outgoing calls before they are dispatched by a Channel.

    Implementers use this mechanism to add cross-cutting behavior to Channel and stub implementations. Common examples of such behavior include:

    • Logging and monitoring call behavior
    • Adding metadata for proxies to observe
    • Request and response rewriting

    Providing authentication credentials is better served by CallCredentials. But a ClientInterceptor could set the CallCredentials within the CallOptions.

    • Method Detail

      • interceptCall

        <ReqT,​RespT> ClientCall<ReqT,​RespT> interceptCall​(MethodDescriptor<ReqT,​RespT> method,
                                                                      CallOptions callOptions,
                                                                      Channel next)
        Intercept ClientCall creation by the next Channel.

        Many variations of interception are possible. Complex implementations may return a wrapper around the result of next.newCall(), whereas a simpler implementation may just modify the header metadata prior to returning the result of next.newCall().

        next.newCall() must not be called under a different Context other than the current Context. The outcome of such usage is undefined and may cause memory leak due to unbounded chain of Contexts.

        Parameters:
        method - the remote method to be called.
        callOptions - the runtime options to be applied to this call.
        next - the channel which is being intercepted.
        Returns:
        the call object for the remote operation, never null.