0
현재 GRPC-Java에서 CallCredentials를 사용하지 않습니다. 특정 호출에 대해 헤더의 여러 필드를 전달해야합니다. 아래에 주어진대로 헤더를 채우고 비동기 스텁/채널을 사용하면서 호출되는 인터셉터를 추가했습니다.grpc java 클라이언트 요청에 대한 헤더 채우기
채우기 헤더
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;
}
나는 클라이언트 요격에 전달 인스턴스 변수로 헤더 필드에 접근하고있다. 헤더가 원하는 값을 포함한다는 것을 알 수 있습니다. 시작 지점에 도달하면 null이됩니다 (서버 쪽에서 헤더가 채워지는 것은 분명하지 않습니다). 이 문제를 해결할 수있는 아이디어 (또는 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);
}
};
}
당신은 나에게 수정 프로그램을 공유 할 수 있습니까? – rana
그 대답에 위. –
이 코드는 어디에 있습니까? 답변을 명확하게 업데이트 해 주시겠습니까? === 캐시 된 메타 데이터 = getHeaders(). get (Metadata.Key.of ("testID", Metadata.ASCII_STRING_MARSHALLER)))); headers.merge (캐싱 됨); – rana