【发布时间】:2019-07-20 10:42:09
【问题描述】:
我需要根据传入的值发送 gRPC 请求的响应标头。这样做的方法是使用 ServerInterceptor。但在这里我有点卡住了。我可以使用ForwardingServerCallListener.SimpleForwardingServerCallListener#onMessage 拦截传入的值,但我看不到将这个值放入上下文并在ForwardingServerCall.SimpleForwardingServerCall#sendHeaders 中读取它的方法。
这是我的代码:
public class FooInterceptor implements ServerInterceptor {
@Override
public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(ServerCall<ReqT, RespT> call, Metadata headers, ServerCallHandler<ReqT, RespT> next) {
var serverCall = new ForwardingServerCall.SimpleForwardingServerCall<>(call) {
@Override
public void sendHeaders(Metadata headers) {
//Here I should get the value from the context and add it to the headers
//var foo = CONTEXT_KEY.get("foo");
//headers.put(METADATA_KEY, foo);
super.sendHeaders(headers);
}
}
ServerCall.Listener<ReqT> listenerWithContext = Contexts
.interceptCall(Context.current(), serverCall, headers, next);
return new ForwardingServerCallListener.SimpleForwardingServerCallListener<>(listenerWithContext) {
@Override
public void onMessage(ReqT message) {
if (message instanceof FooRequest) {
var foo = ((FooRequest) message).getFoo();
//How to add it to context?
}
super.onMessage(message);
}
};
}
}
所以问题出在ForwardingServerCallListener.SimpleForwardingServerCallListener#onMessage 方法中,我能够从消息中获取值,但我无法用新值重写那里的上下文。
任何想法/建议将不胜感激!
【问题讨论】:
标签: java header grpc interceptor grpc-java