Skip to main content

Extension Points

ClientInterceptor

io.grpc.ClientInterceptor is an interceptor to intercept the lifecycle of a gRPC call on the client side.

Register a ClientInterceptor for all gRPC stubs:

@Component
public class LoggingClientInterceptor implements ClientInterceptor {
private static final Logger log = LoggerFactory.getLogger(LoggingClientInterceptor.class);

@Override
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next) {
return new ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(next.newCall(method, callOptions)) {
@Override
public void sendMessage(ReqT message) {
log.info("Sending message: {}", message);
super.sendMessage(message);
}
};
}
}

Multiple ClientInterceptor will be called in the order defined by the Spring Bean's order, from smallest to largest.

GrpcChannelCustomizer

GrpcChannelCustomizer customize the Channel before it is created.

Register a GrpcChannelCustomizer to set the retry attempts for the gRPC channels:

@Component
public class RetryGrpcChannelCustomizer implements GrpcChannelCustomizer {
@Override
public void customize(GrpcClientProperties.Channel channelConfig, ManagedChannelBuilder<?> channelBuilder) {
channelBuilder.enableRetry().maxRetryAttempts(3);
}
}

Multiple GrpcChannelCustomizer will be called in the order defined by the Spring Bean's order, from smallest to largest.