gRPC 中监听 Sream 和 Transport 的事件
gRPC 提供了拦截器可以监听请求的事件,但是对于 Stream 或者 Transport 的具体事件,无法通过拦截器实现;gRPC 提供了 StreamTracer 和 TransportFilter 支持这样的能力
StreamTracer
StreamTracer
用于监听流的所有事件,包括流关闭、出入站消息、出入站流大小等信息
StreamTracer
有用于客户端的 ClientStreamTracer
和用于服务端的 ServerStreamTracer
客户端
客户端的 StreamTracer
在拦截器中注入,当有请求被执行时,可以向 callOptions
添加自定义的 ClientStreamTracer.Factory
,这样就会创建相应的 StreamTracer
,实现监听
- CustomClientInterceptor.java
在拦截器中指定
public class CustomClientInterceptor implements ClientInterceptor {
@Override
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next) {
callOptions = callOptions.withStreamTracerFactory(new CustomClientStreamTracerFactory<>(method, callOptions, next));
return next.newCall(method, callOptions);
}