【问题标题】:GRPC Interceptor - Modify message by Number indicator'sGRPC 拦截器 - 通过数字指示器修改消息
【发布时间】:2019-05-04 23:40:59
【问题描述】:

我正在学习 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

}

有什么方法可以做到这一点。

【问题讨论】:

    标签: grpc grpc-java


    【解决方案1】:

    您可以在以下服务器拦截器中修改请求消息。然后你的 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);
          }
        };
     }
    

    【讨论】:

      猜你喜欢
      • 2019-11-24
      • 1970-01-01
      • 1970-01-01
      • 2018-05-31
      • 2021-05-11
      • 2021-09-10
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多