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



我正在学习java中的grpc服务,并试图弄清楚是否可以拦截和修改请求。

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

样品原型:

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
}

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

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

最新更新