从gRPC Java服务器端拦截器获取消息

时间:2019-07-15 19:28:15

标签: grpc interceptor grpc-java

我正在用Java编写gRPC服务器端拦截器。我只是想访问请求消息并从消息中读取一个字段。但是经过1天的谷歌搜索和与他人交谈之后,我找不到如何做的事情。

知道要怎么做吗?

import io.grpc.Metadata;
import io.grpc.ServerCall;
import io.grpc.ServerCallHandler;
import io.grpc.ServerInterceptor;

public class EventInterceptor implements ServerInterceptor {


    @Override
    public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(
            ServerCall<ReqT, RespT> serverCall,
            Metadata metadata,
            ServerCallHandler<ReqT, RespT> serverCallHandler) {

        // TODO: Get the request message here
        return serverCallHandler.startCall(serverCall, metadata);
    }
}

1 个答案:

答案 0 :(得分:0)

请求消息稍后到达。您需要返回自己的侦听器以观察消息。

import io.grpc.ForwardingServerCallListener.SimpleForwardingServerCallListener;

public class EventInterceptor implements ServerInterceptor {
    @Override
    public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(
            ServerCall<ReqT, RespT> serverCall,
            Metadata metadata,
            ServerCallHandler<ReqT, RespT> serverCallHandler) {
        ServerCall.Listener listener = serverCallHandler.startCall(serverCall, metadata);
        return new SimpleForwardingServerCallListener<ReqT>(listener) {
            @Override public void onMessage(ReqT req) {
                // You now have access to the request(s)
                doWork(req);
                super.onMessage(req);
            }
        };
    }
}
相关问题