为 grpc java 客户端请求填充 header
populating header for grpc java client request
我现在没有在 GRPC-Java 中使用 CallCredentials。对于某些调用,我需要在 header 中传入多个字段。我已经填充了下面给出的 headers 并添加了一个拦截器,它在使用异步 Stub/channel 时被调用。
填充header
public Metadata generateHeader() {
Metadata.Key<String> jwtKey = Metadata.Key.of("jwt", Metadata.ASCII_STRING_MARSHALLER);
headers.put(jwtKey, jwt);
Metadata.Key<String> testKey = Metadata.Key.of("testID", Metadata.ASCII_STRING_MARSHALLER);
headers.put(testKey, testID);
return headers;
}
我正在访问 headers 字段作为传递给客户端拦截器的实例变量。我可以看到 headers 包含预期值,直到它进入开始调用,此时它变为空(我显然没有看到 headers 在服务器端填充)。解决此问题的任何想法(或者我应该使用 CallCredentials)。 GRPC-Java 的文档需要大量工作。
@Override
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
MethodDescriptor<ReqT, RespT> method,
CallOptions callOptions,
Channel next) {
log.info("HEADER INTERCEPTOR{}", headers.get(Metadata.Key.of("jwt", Metadata.ASCII_STRING_MARSHALLER)));
ClientCall<ReqT, RespT> call = next.newCall(method, callOptions);
return new ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(call) {
@Override
public void start(ClientCall.Listener<RespT> responseListener, Metadata headers) {
log.info("HEADER START {}", headers.keys());
super.start(responseListener, headers);
}
};
}
我必须通过方法调用访问 headers,然后我才能获得 header keys/values。
Metadata cached = getHeaders().get(Metadata.Key.of("testID", Metadata.ASCII_STRING_MARSHALLER)));
headers.merge(cached);
&
public Metadata getHeaders() {
return headers;
}
我现在没有在 GRPC-Java 中使用 CallCredentials。对于某些调用,我需要在 header 中传入多个字段。我已经填充了下面给出的 headers 并添加了一个拦截器,它在使用异步 Stub/channel 时被调用。
填充header
public Metadata generateHeader() {
Metadata.Key<String> jwtKey = Metadata.Key.of("jwt", Metadata.ASCII_STRING_MARSHALLER);
headers.put(jwtKey, jwt);
Metadata.Key<String> testKey = Metadata.Key.of("testID", Metadata.ASCII_STRING_MARSHALLER);
headers.put(testKey, testID);
return headers;
}
我正在访问 headers 字段作为传递给客户端拦截器的实例变量。我可以看到 headers 包含预期值,直到它进入开始调用,此时它变为空(我显然没有看到 headers 在服务器端填充)。解决此问题的任何想法(或者我应该使用 CallCredentials)。 GRPC-Java 的文档需要大量工作。
@Override
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
MethodDescriptor<ReqT, RespT> method,
CallOptions callOptions,
Channel next) {
log.info("HEADER INTERCEPTOR{}", headers.get(Metadata.Key.of("jwt", Metadata.ASCII_STRING_MARSHALLER)));
ClientCall<ReqT, RespT> call = next.newCall(method, callOptions);
return new ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(call) {
@Override
public void start(ClientCall.Listener<RespT> responseListener, Metadata headers) {
log.info("HEADER START {}", headers.keys());
super.start(responseListener, headers);
}
};
}
我必须通过方法调用访问 headers,然后我才能获得 header keys/values。
Metadata cached = getHeaders().get(Metadata.Key.of("testID", Metadata.ASCII_STRING_MARSHALLER)));
headers.merge(cached);
&
public Metadata getHeaders() {
return headers;
}