GRPC拦截器-按数字指示符修改消息

时间:2018-12-03 16:23:54

标签: grpc grpc-java

我正在讲讲Java中的grpc服务,并且试图弄清楚是否有可能拦截和修改请求。

我考虑根据protobuf中指定的编号修改grpc请求。

Protobuf样品:

message PersonRequest {
  string name = 1;
  int32 id = 2;
  bool has_ponycopter = 3;
}

@Override
    public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall
            (ServerCall<ReqT, RespT> call, Metadata headers, ServerCallHandler<ReqT, RespT> next) {
     // Get by number 1 (name from proto)
     // change the name
     // send the updated request

}

有没有办法做到这一点。

1 个答案:

答案 0 :(得分:0)

您可以在以下服务器拦截器中修改请求消息。然后,您的serviceImpl将收到修改后的请求消息并进行处理。

import io.grpc.ForwardingServerCallListener.SimpleForwardingServerCallListener;
...
 @Override
 public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(
     ServerCall<ReqT, RespT> call, Metadata headers,
     ServerCallHandler<ReqT, RespT> next) {
    ServerCall.Listener<ReqT> listener = next.startCall(call);
    return new SimpleForwardingServerCallListener<ReqT>(listener) {
      @Override
      public void onMessage(ReqT message) {
        ReqT modifiedMessage = modify(message);
        delegate().onMessage(modifiedMessage);
      }
    };
 }